分类: Java
2013-02-06 10:49:53
在我们对http的资源进行请求的时候,我们可以通过get和post 这个2种方式
用get获取信息,所需要提交的内容是体现在url中的,通常的形式是以: “?”前面是的网址,”?”后面的是提交的内容
例如:我们在百度中 打入nba,则请求的url 就为: ,它所提交的内容在url中时可见的。而用post方式提交呢,它提交的内容我们是不可见的。如果我们要写一个自动post 表单数据的程序,那我们就得先知道发送这个post请求需要那些数据选项。
例如 : 是一个查询的页面,我们通过浏览器的开发者工具(按F12)来查看该页面html
可以看到这里提交表单的方式是用post
现在我们通过浏览器输入查询的身份证号码和姓名,提交之后,我们就可以在开发者工具里查看psot 表单的数据内容了!
从上图可以得出我们需要提交的post 内容有 _viewstate,_eventvalidation,tbx_pername,tbx_pidcard,tbx_bankAccout,btn_Querry这几项内容
知道了这些,我们就可以通过程序来自动完成post请求了
我是通过httpclient这个组件来完成的,HttpClient 是 Apache Jakarta Common 下的子项目,可以用来提供高效的、最新的、功能丰富的支持 HTTP 协议的编程工具包,网上有很多关于它的介绍,有兴趣的可以自己去了解。以下就是实现的代码(记得把httpclient的lib文件里的jar文件导入到你的工程项目中区)
import java.io.*; import java.sql.*; import java.io.PrintStream; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.http.HttpEntity; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.InputStreamEntity; import org.apache.http.client.entity.UrlEncodedFormEntity; import org.apache.http.impl.client.DefaultHttpClient; import org.apache.http.message.BasicNameValuePair; import org.apache.http.util.EntityUtils; import org.apache.http.*; public class httpclient { public static void post_comment(String pdcode,String psname,String id,HttpClient httpclient) throws Exception{ try { //构造一个post对象 HttpPost httpPost = new HttpPost(""); //添加所需要的post内容 Listnvps = new ArrayList (); nvps.add(new BasicNameValuePair("__VIEWSTATE", "/wEPDwUKMTI3ODgyMTE1M2RkYvz2pJOChArFWd3j+6npOZr96OI=")); nvps.add(new BasicNameValuePair("__EVENTVALIDATION", "/wEWBQLzxcLpBgL3n9/ACwLuubGjBgKs9/TJDwLvjry/BYt++cnimkGWb2qATgw5QzGksEj8")); nvps.add(new BasicNameValuePair("tbx_pername", psname)); nvps.add(new BasicNameValuePair("tbx_PidCard", pdcode)); nvps.add(new BasicNameValuePair("tbx_bankAccount", "")); nvps.add(new BasicNameValuePair("btnQuery", "查询")); httpPost.setEntity(new UrlEncodedFormEntity(nvps, Consts.UTF_8)); HttpResponse response = httpclient.execute(httpPost); HttpEntity entity = response.getEntity(); // EntityUtils.consume(entity); String Filename = "e:\\gjj\\"+ id+".txt"; createNewFile(Filename,EntityUtils.toString(entity)) } finally { System.out.println("ok!"); } } public static void main(String[] args) throws Exception { HttpClient httpclient =new DefaultHttpClient(); post_comment(“330621xxxxxxxxxxxx”,"张三","test",httpclient); httpclient.getConnectionManager().shutdown(); } }