zoukankan      html  css  js  c++  java
  • Java实现发送网络请求和处理json数据

    Java发送Http请求是一个复杂操作,我们可以写成一个方法。我们可以编写一个HttpUtil.java,示例如下:

    
    import java.io.BufferedReader;
    import java.io.IOException;
    import java.io.InputStreamReader;
    import java.io.PrintWriter;
    import java.net.URL;
    import java.net.URLConnection;
    import java.util.List;
    import java.util.Map;
    
    public class HttpUtil {
    
    	/**
    	 * 向指定URL发送GET方法的请求
    	 * @param url 发送请求的URL
    	 * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return URL 所代表远程资源的响应结果
    	 */
    	public static String sendGet(String url, String param) {
    		String result = "";
    		BufferedReader in = null;
    		try {
    			String urlNameString = url +"?"+  param;
    			URL realUrl = new URL(urlNameString);
    			// 打开和URL之间的连接
    			URLConnection connection = realUrl.openConnection();
    			// 设置通用的请求属性
    			connection.setRequestProperty("accept", "*/*");
    			connection.setRequestProperty("connection", "Keep-Alive");
    			connection.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 建立实际的连接
    			connection.connect();
    			// 获取所有响应头字段
    			//Map<String, List<String>> map = connection.getHeaderFields();
    			// 遍历所有的响应头字段
    			//for (String key : map.keySet()) {
    			//	System.out.println(key + "--->" + map.get(key));
    			//}
    			// 定义 BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(new InputStreamReader(connection.getInputStream()));
    			String line;
    			while ((line = in.readLine()) != null) {
    				result += line;
    			}
    		} catch (Exception e) {
    			System.out.println("发送GET请求出现异常!" + e);
    			e.printStackTrace();
    		}
    		// 使用finally块来关闭输入流
    		finally {
    			try {
    				if (in != null) {
    					in.close();
    				}
    			} catch (Exception e2) {
    				e2.printStackTrace();
    			}
    		}
    		return result;
    	}
    
    	/**
    	 * 向指定 URL 发送POST方法的请求
    	 * @param url 发送请求的 URL
    	 * @param param 请求参数,请求参数应该是 name1=value1&name2=value2 的形式。
    	 * @return 所代表远程资源的响应结果
    	 */
    	public static String sendPost(String url, String param) {
    		PrintWriter out = null;
    		BufferedReader in = null;
    		String result = "";
    		try {
    			URL realUrl = new URL(url);
    			// 打开和URL之间的连接
    			URLConnection conn = realUrl.openConnection();
    			// 设置通用的请求属性
    			conn.setRequestProperty("accept", "*/*");
    			conn.setRequestProperty("connection", "Keep-Alive");
    			conn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");
    			// 发送POST请求必须设置如下两行
    			conn.setDoOutput(true);
    			conn.setDoInput(true);
    			// 获取URLConnection对象对应的输出流
    			out = new PrintWriter(conn.getOutputStream());
    			// 发送请求参数
    			out.print(param);
    			// flush输出流的缓冲
    			out.flush();
    			// 定义BufferedReader输入流来读取URL的响应
    			in = new BufferedReader(new InputStreamReader(conn.getInputStream()));
    			//String line;
    			//while ((line = in.readLine()) != null) {
    			//	result += line;
    			//}
    		} catch (Exception e) {
    			System.out.println("发送 POST 请求出现异常!" + e);
    			e.printStackTrace();
    		}
    		// 使用finally块来关闭输出流、输入流
    		finally {
    			try {
    				if (out != null) {
    					out.close();
    				}
    				if (in != null) {
    					in.close();
    				}
    			} catch (IOException ex) {
    				ex.printStackTrace();
    			}
    		}
    		return result;
    	}
    
    }
    
    

    完成这一步,我们就可以发送Get和Post请求。得到返回的json,因为jdk没有json解析的方法,所以我们需要下载解析json 的jar的文件,再导入这些文件就能使用了。然后进行下一步。

    
    import java.io.*;
    import java.util.*;
    import org.json.*;
    import net.sf.*;
    public class Main
     {	
    	public static void main(String[] args)  {
    		Scanner sc =new Scanner(System.in);
    		
    		int xh=20199216,count=0;
    		List<String> p=new ArrayList<String>();
    		while(++xh<20199264){
    		String content=HttpUtil.sendGet("http://49.234.230.82:1000/m/1.php","xh="+xh);
    		try{
    			JSONObject j=new JSONObject(content);
    			System.out.println("姓名:  "+j.get("studentName"));
    			System.out.println("手机号:  "+j.get("studentIpone"));
    			if("".equals(j.get("studentIpone"))){
    				p.add(j.get("studentName").toString());
    			}
    			System.out.println();
    			count++;
    		}catch(Exception e){
    			System.out.println(xh+"此学号无信息
    ");
    		}	
    	}
    		System.out.println("共"+count+"人");
    		System.out.println("其中"+p.size()+"没有联系方式!");
    		System.out.println("分别是:");
    		for(int i=0;i<p.size();i++){
    			System.out.print(p.get(i)+" ");
    			if((i+1)%5==0){
    				System.out.println();
    			}
    		}
    }}
    
    

    jar下载地址:复制这段内容后打开百度网盘App,操作更方便哦。 链接:https://pan.baidu.com/s/1p5N86HkXtSNjt5v3I-7_Yw 提取码:63wt

    运行结果

  • 相关阅读:
    HDU 1525
    kmp模板
    hdu 4616 Game(树形DP)
    hdu 4619 Warm up 2(并查集活用)
    hdu 4614 Vases and Flowers(线段树加二分查找)
    Codeforces 400D Dima and Bacteria(并查集最短路)
    poj 2823 Sliding Window (单调队列)
    hdu 2196 Computer(树形dp)
    hdu 4604 Deque
    最短路径
  • 原文地址:https://www.cnblogs.com/szy5201314/p/13925714.html
Copyright © 2011-2022 走看看