这个url中,a、b和c是url参数,具体的说是参数名,与之用“=”隔开的是对应的参数值。也就是说参数a的值为3、参数b的值为5、参数c的值为7。get.do是请求地址,紧跟这个地址的参数a需要用“?”作为分隔符,其余参数用“&”做分隔符。
这种get请求发起后,服务器端可以通过request.getParameter()方法来获得参数值。如要获得参数a的值可以通过request.getParameter("a");
2.Post方式
相比get方式,post方式更为隐蔽。例如:http://www.javaweb.cc/post.do
在这个url中,你看不到任何参数,真正的参数隐藏在Http请求的数据体中。如果了解网络监听的话,就会对这一点深有体会。
我们举一个简单的例子:通过表单做登录操作。
我们简化一个登录表单:
- 用户名
- 密码
type="reset" value="重置" />
表单中有2个字段,用户名(username)和密码(password)
注意form标签中的method参数值是post!
即便是表单,在服务器端仍然可以通过request.getParameter()方法来获得参数值。
Post方式,其实是将表单字段和经过编码的字段值经过组合以数据体的方式做了参数传递。
经过一番阐述,相信大家对两种网络参数传递方式都有所了解了。
Get方式比较简单,通过构建一个简单HttpURLConnection就可以获得,我们暂且不说。
我们主要来描述一下如何通过java代码构建一个表单提交。
仔细研究表单提交时所对应的http数据体,发现其表单字段是以如下方式构建的:
arg0=urlencode(value0)&arg1=urlencode(value1)
当然,尤其要注意字段名,参数名只不能使用中文这类字符。
3、通过httpclient来模拟POST提交表单:
importjava.util.Random;
importjava.util.ArrayList;
importjava.util.List;
importorg.apache.http.HttpEntity;
importorg.apache.http.HttpResponse;
importorg.apache.http.NameValuePair;
importorg.apache.http.client.entity.UrlEncodedFormEntity;
importorg.apache.http.client.methods.HttpGet;
importorg.apache.http.client.methods.HttpPost;
importorg.apache.http.cookie.Cookie;
importorg.apache.http.impl.client.DefaultHttpClient;
importorg.apache.http.message.BasicNameValuePair;
importorg.apache.http.protocol.HTTP;
importorg.apache.http.util.EntityUtils;
/** *//** * Example how to use multipart/form encoded POST request.
*/
publicclassClientMultipartFormPost{
publicstaticvoidExecuClient(String userName, String wlanuserip2,
String wlanacip2)throwsException{
DefaultHttpClient httpclient=newDefaultHttpClient();
String a1="http://172.21.16.38:8080/bpss/jsp/do_login.jsp";
try{
HttpGet httpget=newHttpGet(a1);
HttpResponse response=httpclient.execute(httpget);
HttpEntity entity=response.getEntity();
System.out.println("Login form get:"+response.getStatusLine());
EntityUtils.consume(entity);
//这里需要生成并传递一个COOKIE过去System.out.println("Initial set of cookies:");
Listcookies=httpclient.getCookieStore().getCookies();
if(cookies.isEmpty()){
System.out.println("None");
}else{
for(inti=0; i{
System.out.println("-"+cookies.get(i).toString());
} } HttpPost httppost=newHttpPost(a1);
Listnvps=newArrayList();
nvps.add(newBasicNameValuePair("local","zh_CN"));
nvps.add(newBasicNameValuePair("USER", userName));
nvps.add(newBasicNameValuePair("PWD","123456"));
nvps.add(newBasicNameValuePair("pwdtype","1"));
nvps.add(newBasicNameValuePair("actiontype","LOGIN"));
nvps.add(newBasicNameValuePair("logonsessid",""));
httppost.setEntity(newUrlEncodedFormEntity(nvps, HTTP.UTF_8));
response=httpclient.execute(httppost);
entity=response.getEntity();
System.out.println("测试地址:"+a1);
System.out.println("Login form get:"+response.getStatusLine());
EntityUtils.consume(entity);
//读出COOKIE信息System.out.println("Post logon cookies:");
cookies=httpclient.getCookieStore().getCookies();
if(cookies.isEmpty()){
System.out.println("None");
}else{
for(inti=0; i{
System.out.println("-"+cookies.get(i).toString());
} }
}finally{
try{
httpclient.getConnectionManager().shutdown();//总是关闭连接
}catch(Exception ignore){
System.out.println(ignore.getMessage());
} } }
posted on 2012-06-06 17:09 japper 阅读(4287) 评论(1) 编辑 收藏 所属分类: Java