分类: 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内容
List nvps = 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();
}
}