1 package test; 2 3 import java.io.BufferedReader; 4 import java.io.DataOutputStream; 5 import java.io.IOException; 6 import java.io.InputStreamReader; 7 import java.net.HttpURLConnection; 8 import java.net.URL; 9 import java.net.URLEncoder; 10 11 public class HttpInvoker { 12 13 public static final String GET_URL = " http://localhost:8080/welcome1 "; 14 15 public static final String POST_URL = " http://www.court.gov.cn/zgcpwsw/List/ListContent "; 16 17 public static void readContentFromGet() throws IOException { 18 // 拼凑get请求的URL字串,使用URLEncoder.encode对特殊和不可见字符进行编码 19 String getURL = GET_URL + " ?username= " 20 + URLEncoder.encode(" fat man ", " utf-8 "); 21 URL getUrl = new URL(getURL); 22 // 根据拼凑的URL,打开连接,URL.openConnection函数会根据 URL的类型, 23 // 返回不同的URLConnection子类的对象,这里URL是一个http,因此实际返回的是HttpURLConnection 24 HttpURLConnection connection = (HttpURLConnection) getUrl 25 .openConnection(); 26 // 进行连接,但是实际上get request要在下一句的 connection.getInputStream()函数中才会真正发到 27 // 服务器 28 connection.connect(); 29 // 取得输入流,并使用Reader读取 30 BufferedReader reader = new BufferedReader(new InputStreamReader( 31 connection.getInputStream())); 32 System.out.println(" ============================= "); 33 System.out.println(" Contents of get request "); 34 System.out.println(" ============================= "); 35 String lines; 36 while ((lines = reader.readLine()) != null) { 37 System.out.println(lines); 38 } 39 reader.close(); 40 // 断开连接 41 connection.disconnect(); 42 System.out.println(" ============================= "); 43 System.out.println(" Contents of get request ends "); 44 System.out.println(" ============================= "); 45 } 46 47 public static void readContentFromPost() throws IOException { 48 // Post请求的url,与get不同的是不需要带参数 49 URL postUrl = new URL(POST_URL); 50 // 打开连接 51 HttpURLConnection connection = (HttpURLConnection) postUrl 52 .openConnection(); 53 // Output to the connection. Default is 54 // false, set to true because post 55 // method must write something to the 56 // connection 57 // 设置是否向connection输出,因为这个是post请求,参数要放在 58 // http正文内,因此需要设为true 59 connection.setDoOutput(true); 60 // Read from the connection. Default is true. 61 connection.setDoInput(true); 62 // Set the post method. Default is GET 63 connection.setRequestMethod("POST"); 64 // Post cannot use caches 65 // Post 请求不能使用缓存 66 connection.setUseCaches(false); 67 // This method takes effects to every instances of this class. 68 // URLConnection.setFollowRedirects是static 函数,作用于所有的URLConnection对象。 69 // connection.setFollowRedirects(true); 70 71 // This methods only takes effacts to this instance. 72 // URLConnection.setInstanceFollowRedirects 是成员函数,仅作用于当前函数 73 connection.setInstanceFollowRedirects(true); 74 // Set the content type to urlencoded, 75 // because we will write some URL-encoded content to the connection. Settings above must be set before connect! 76 // 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的 77 // 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode 78 // 进行编码 79 80 connection.setRequestProperty("Accept", "*/*"); 81 connection.setRequestProperty("Accept-Encoding", "gzip, deflate"); 82 connection.setRequestProperty("Accept-Language", "zh-CN,zh;q=0.8,en;q=0.6"); 83 connection.setRequestProperty("Connection", "keep-alive"); 84 connection.setRequestProperty("Content-Length", "153"); 85 connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=UTF-8"); 86 // connection.setRequestProperty("cookie", "Hm_lvt_692544717e4ca5489bff77b2e9b28e7b=1449645321; Hm_lpvt_692544717e4ca5489bff77b2e9b28e7b=1449645391; __jsluid=8c1e0374852916bf96a7f809c2aee3c8; _gscu_482111853=49645323pc25ob94; _gscbrs_482111853=1; ASP.NET_SessionId=m44tcmadhujdeijinvbiecnw; __jsl_clearance=1450332415.032|0|t2eMmMeGhHeoINln2hPaPf4D5HI%3D; _gscu_1241932522=50249161sf1y6f54; _gscs_1241932522=t50334524zs7d8g57|pv:1; _gscbrs_1241932522=1"); 87 connection.setRequestProperty("cookie", "Hm_lvt_692544717e4ca5489bff77b2e9b28e7b=1449645321; Hm_lpvt_692544717e4ca5489bff77b2e9b28e7b=1449645391; __jsluid=8c1e0374852916bf96a7f809c2aee3c8; _gscu_482111853=49645323pc25ob94; _gscbrs_482111853=1; ASP.NET_SessionId=m44tcmadhujdeijinvbiecnw; __jsl_clearance=1450340955.958|0|YZsm9pGKRX79ASJMb7gwQkJv%2FS8%3D; _gsref_1241932522=http://www.court.gov.cn/zgcpwsw/List/List?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6; _gscu_1241932522=50249161sf1y6f54; _gscs_1241932522=t5034096609obrb54|pv:2; _gscbrs_1241932522=1"); 88 connection.setRequestProperty("Host","www.court.gov.cn"); 89 connection.setRequestProperty("Origin","http://www.court.gov.cn"); 90 connection.setRequestProperty("Referer","http://www.court.gov.cn/zgcpwsw/List/List?sorttype=1&conditions=searchWord+1+AJLX++%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B:%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6"); 91 connection.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.86 Safari/537.36"); 92 connection.setRequestProperty("X-Requested-With","XMLHttpRequest"); 93 94 95 // 连接,从postUrl.openConnection()至此的配置必须要在 connect之前完成, 96 // 要注意的是connection.getOutputStream会隐含的进行 connect。 97 connection.connect(); 98 DataOutputStream out = new DataOutputStream(connection 99 .getOutputStream()); 100 // The URL-encoded contend 101 // 正文,正文内容其实跟get的URL中'?'后的参数字符串一致 102 // 表单参数包括:(1)Param:案件类型:刑事案件(2)Index:1 103 //(3)Page:5(4)Order:法院层级(5)Direction:asc 104 String content = "Param=%E6%A1%88%E4%BB%B6%E7%B1%BB%E5%9E%8B%3A%E5%88%91%E4%BA%8B%E6%A1%88%E4%BB%B6&Index=4&Page=5&Order=%E6%B3%95%E9%99%A2%E5%B1%82%E7%BA%A7&Direction=asc"; 105 // String content = "Param=" 106 // + URLEncoder.encode("案件类型:刑事案件 ", "utf-8"); 107 // DataOutputStream.writeBytes将字符串中的16位的 unicode字符以8位的字符形式写道流里面 108 out.writeBytes(content); 109 110 out.flush(); 111 out.close(); // flush and close 112 BufferedReader reader = new BufferedReader(new InputStreamReader( 113 connection.getInputStream())); 114 String line; 115 System.out.println(" ============================= "); 116 System.out.println(" Contents of post request "); 117 System.out.println(" ============================= "); 118 while ((line = reader.readLine()) != null) { 119 System.out.println(line); 120 } 121 System.out.println(" ============================= "); 122 System.out.println(" Contents of post request ends "); 123 System.out.println(" ============================= "); 124 reader.close(); 125 connection.disconnect(); 126 } 127 128 129 /** */ 130 /** 131 * @param args 132 */ 133 public static void main(String[] args) { 134 // TODO Auto-generated method stub 135 try { 136 // readContentFromGet(); 137 readContentFromPost(); 138 } catch (IOException e) { 139 // TODO Auto-generated catch block 140 e.printStackTrace(); 141 } 142 } 143 144 }
第一次访问出现了521的错误状态码,原因是:
(https://www.zhihu.com/question/31015275)