Java模拟post提交表单数据

  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)

时间: 2024-08-27 00:53:40

Java模拟post提交表单数据的相关文章

使用jQuery实现跨域提交表单数据

我们在WEB开发中有时会遇到这种情况,比如要从A网站收集用户信息,提交给B网站处理,这个时候就会涉及到跨域提交数据的问题.本文将给您介绍如何使用jQuery来实现异步跨域提交表单数据. 在jQuery中,我们使用json数据类型,通过getJSON方法来实现从服务端获取或发送数据,而当要向不同远程服务器端提交或者获取数据时,要采用jsonp数据类型.使用这种类型的话,会创建一个查询字符串参数 callback=? ,这个参数会加在请求的URL后面.服务器端应当在JSON数据前加上回调函数名,以便

Struct2提交表单数据到Acion

Struct2提交表单数据到Action,Action取表单的数据,传递变量.对象 HTML.jsp <form action="reg.do" method="post"> <input> LoginAction get post 1.action里通过属性获取get.set方法获取. 2.模型驱动 3.model对象 action中要有和表单域对应的属性名,并且要有相应的符合javabean规范的set和get方法 http://blog

jQuery通过AJAX快速提交表单数据

当表单数据项很多时,手动获取表单项的值将变得效率低下,结合jQuery提供的函数serialize(),我们可以实现快速获取数据并提交表单数据. 请看下面的表单: <form id="fm"> <table> <tr> <td>姓名</td> <td> <input type="text" name="name" /> </td> </tr>

php中提交表单数据的POST()方法和GET()方法

提交获取表单数据是表单应用中最常用的操作,经常需要PHP后台从前台页面中获取用户在前台表单页面中提交的各种数据.表单数据传递的方式有以下的两种方法,一种为POST()方法,另外一种为GET()方法.具体采用哪种获取数据的方法是由<form>表单的 method 属性所指定的,下面讲解这两种方法在 Web 表单中的具体应用.大理石平台厂家 使用POST()方法提交表单 在使用POST()方法时,只需要将<form>表单中的属性 method 设置成POST即可. POST()方法不依

OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据

OkHttp框架从入门到放弃,解析图片使用Picasso裁剪,二次封装OkHttpUtils,Post提交表单数据 我们这片博文就来聊聊这个反响很不错的OkHttp了,标题是我恶搞的,本篇将着重详细的分析,探索OkHttp这个框架的使用和封装 一.追其原理 Android系统提供了两种HTTP通信类 HttpURLConnection HttpClient Google推荐使用HttpURLConnection,这个没必要多说,事实上,我这篇写的应该算是比较晚了,很多优秀的博文都已经提出了这些观

js模拟支付宝提交表单

弄过支付宝的程序员可能都知道,里面有很多地方都用到了自提交表单的方式,支付宝的接口通过请求API的形式取得服务器返回的表单字符串,使用out.print("表单字符串")在jsp页面上自提交表单.这种做法虽然很少有人使用,但是它也有着自身的价值,例如有的时候在js内部要提交一个完整的表单但是又不能使用ajax提交,这种时候这种思想就能发挥作用了 封装表单的js如下 var formStart="<form id=\"userForm\" name=\

C#模拟POST提交表单(一)--WebClient

C#的提交表单方式主要有两种WebClient与HttpWebRequest,这里先介绍一种 WebClient,转送门:http://msdn.microsoft.com/zh-cn/library/system.net.webclient(v=VS.80).aspx [csharp] view plaincopyprint? string postString = "arg1=a&arg2=b";//这里即为传递的参数,可以用工具抓包分析,也可以自己分析,主要是form里面

Jquery技巧:使用ajax技术提交表单数据

新建两个页面: 1.show.jsp:调用ajax,将表单中的数据发送给ajax.jsp页面. 2.ajax.jsp:获取show.jsp页面传递的表单数据,并返回结果. 两个页面的编码格式要设置为GBK:

phpcms实现验证码以及异步提交表单数据

在phpcms网站中使用验证码我们要考虑前端模板页面中如何调用验证码和后台程序中如何验证两个方面: 一.在模板中,调用验证码的代码如下: 1 <label for="code">验证码</label> 2 <input type="text" id="code" name="code" size="10"> 3 {form::checkcode('code_img', '