码迷,mamicode.com
首页 > 编程语言 > 详细

Java模拟post提交表单数据

时间:2015-12-18 16:41:09      阅读:250      评论:0      收藏:0      [点我收藏+]

标签:

  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)

Java模拟post提交表单数据

标签:

原文地址:http://www.cnblogs.com/gui0901/p/5057155.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!