httpClient教程Word文档格式.docx
- 文档编号:21156052
- 上传时间:2023-01-28
- 格式:DOCX
- 页数:22
- 大小:22.79KB
httpClient教程Word文档格式.docx
《httpClient教程Word文档格式.docx》由会员分享,可在线阅读,更多相关《httpClient教程Word文档格式.docx(22页珍藏版)》请在冰豆网上搜索。
new
HttpClient();
12.
13.
//设置代理服务器地址和端口
14.
15.
//client.getHostConfiguration().setProxy("
proxy_host_addr"
proxy_port);
16.
17.
//使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
18.
19.
HttpMethod
method
GetMethod("
"
);
20.
21.
//使用POST方法
22.
23.
//HttpMethod
PostMethod("
24.
25.
client.executeMethod(method);
26.
27.
//打印服务器返回的状态
28.
29.
System.out.println(method.getStatusLine());
30.
31.
//打印返回的信息
32.
33.
System.out.println(method.getResponseBodyAsString());
34.
35.
//释放连接
36.
37.
method.releaseConnection();
38.
39.
}
40.}
packagehttp.demo;
importjava.io.IOException;
importmons.httpclient.*;
importmons.httpclient.methods.*;
publicclassSimpleClient{
publicstaticvoidmain(String[]args)throwsIOException
{
HttpClientclient=newHttpClient();
//设置代理服务器地址和端口
//client.getHostConfiguration().setProxy("
//使用GET方法,如果服务器需要通过HTTPS连接,那只需要将下面URL中的http换成https
HttpMethodmethod=newGetMethod("
//使用POST方法
//HttpMethodmethod=newPostMethod("
client.executeMethod(method);
//打印服务器返回的状态
System.out.println(method.getStatusLine());
//打印返回的信息
System.out.println(method.getResponseBodyAsString());
//释放连接
method.releaseConnection();
}
}
2.以GET或者POST方式向网页提交参数
4.
7.import
9./**
11.*
提交参数演示
13.*
该程序连接到一个用于查询手机号码所属地的页面
15.*
以便查询号码段1330227所在的省份以及城市
17.*/
19.public
SimpleHttpClient
client.getHostConfiguration().setHost("
80,
http"
getPostMethod();
//使用POST方式提交数据
//打印结果页面
String
response
=
40.
41.
String(method.getResponseBodyAsString().getBytes("
8859_1"
));
42.
43.
44.
45.
System.out.println(response);
46.
47.
48.
49.
50.
51.
/**
52.
53.
*
使用GET方式提交数据
54.
55.
@return
56.
57.
*/
58.
59.
private
getGetMethod(){
60.
61.
return
/simcard.php?
simcard=1330227"
62.
63.
64.
65.
66.
67.
使用POST方式提交数据
68.
69.
70.
71.
72.
73.
getPostMethod(){
74.
75.
PostMethod
post
/simcard.php"
76.
77.
NameValuePair
simcard
NameValuePair("
simcard"
"
1330227"
78.
79.
post.setRequestBody(new
NameValuePair[]
{
simcard});
80.
81.
post;
82.
83.
84.
85.}
/**
*提交参数演示
*该程序连接到一个用于查询手机号码所属地的页面
*以便查询号码段1330227所在的省份以及城市
*/
publicclassSimpleHttpClient{
client.getHostConfiguration().setHost("
80,"
HttpMethodmethod=getPostMethod();
//使用POST方式提交数据
//打印结果页面
Stringresponse=
newString(method.getResponseBodyAsString().getBytes("
System.out.println(response);
/**
*使用GET方式提交数据
*@return
*/
privatestaticHttpMethodgetGetMethod(){
returnnewGetMethod("
*使用POST方式提交数据
privatestaticHttpMethodgetPostMethod(){
PostMethodpost=newPostMethod("
NameValuePairsimcard=newNameValuePair("
post.setRequestBody(newNameValuePair[]{simcard});
returnpost;
3.处理页面重定向
详细描述:
状态码
对应HttpServletResponse的常量
301
SC_MOVED_PERMANENTLY
页面已经永久移到另外一个新地址
302
SC_MOVED_TEMPORARILY
页面暂时移动到另外一个新的地址
303
SC_SEE_OTHER
客户端请求的地址必须通过另外的URL来访问
307
SC_TEMPORARY_REDIRECT
同SC_MOVED_TEMPORARILY
下面的代码片段演示如何处理页面的重定向
1.client.executeMethod(post);
3.System.out.println(post.getStatusLine().toString());
5.post.releaseConnection();
7.//检查是否重定向
9.int
statuscode
post.getStatusCode();
11.if
((statuscode
==
HttpStatus.SC_MOVED_TEMPORARILY)
||
(statuscode
HttpStatus.SC_MOVED_PERMANENTLY)
HttpStatus.SC_SEE_OTHER)
HttpStatus.SC_TEMPORARY_REDIRECT))
//读取新的URL地址
Header
header
post.getResponseHeader("
location"
if
(header
!
null)
newuri
header.getValue();
((newuri
null)
||
(newuri.equals("
)))
/"
;
GetMethod
redirect
GetMethod(newuri);
client.executeMethod(redirect);
System.out.println("
Redirect:
+
redirect.getStatusLine().toString());
redirect.releaseConnection();
}
else
Invalid
redirect"
client.executeMethod(post);
System.out.println(post.getStatusLine().toString());
post.releaseConnection();
//检查是否重定向
intstatuscode=post.getStatusCode();
if((statuscode==HttpStatus.SC_MOVED_TEMPORARILY)||
(statuscode==HttpStatus.SC_MOVED_PERMANENTLY)||
(statuscode==HttpStatus.SC_SEE_OTHER)||
statuscode==HttpStatus.SC_TEMPORARY_REDIRECT))
//读取新的URL地址
Headerheader=post.getResponseHeader("
if(header!
=null)
Stringnewuri=header.getValue();
if((newuri==null)||(newuri.equals("
)))
newuri="
GetMethodredirect=newGetMethod(newuri);
client.executeMethod(redirect);
System.out.println("
+
redirect.getStatusLine().toString());
redirect.releaseConnection();
}else
Invalidredirect"
}
4.模拟输入用户名和口令进行登录
本小节应该说是HTTP客户端编程中最常碰见的问题,很多网站的内容都只是对注册用户可见的,这种情况下就必须要求使用正确的用户名和口令登录成功后,方可浏览到想要的页面。
因为HTTP协议是无状态的,也就是连接的有效期只限于当前请求,请求内容结束后连接就关闭了。
在这种情况下为了保存用户的登录信息必须使用到Cookie机制。
以JSP/Servlet为例,当浏览器请求一个JSP或者是Servlet的页面时,应用服务器会返回一个参数,名为jsessionid(因不同应用服务器而异),值是一个较长的唯一字符串的Cookie,这个字符串值也就是当前访问该站点的会话标识。
浏览器在每访问该站点的其他页面时候都要带上jsessionid这样的Cookie信息,应用服务器根据读取这个会话标识来获取对应的会话信息。
对于需要用户登录的网站,一般在用户登录成功后会将用户资料保存在服务器的会话中,这样当访问到其他的页面时候,应用服务器根据浏览器送上的Cookie中读取当前请求对应的会话标识以获得对应的会话信息,然后就可以判断用户资料是否存在于会话信息中,如果存在则允许访问页面,否则跳转到登录页面中要求用户输入帐号和口令进行登录。
这就是一般使用JSP开发网站在处理用户登录的比较通用的方法。
对于HTTP的客户端来讲,如果要访问一个受保护的页面时就必须模拟浏览器所做的工作,首先就是请求登录页面,然后读取Cookie值;
再次请求登录页面并加入登录页所需的每个参数;
最后就是请求最终所需的页面。
当然在除第一次请求外其他的请求都需要附带上Cookie信息以便服务器能判断当前请求是否已经通过验证。
mons.httpclient.cookie.*;
用来演示登录表单的示例
13.*/
15.public
FormLoginDemo
final
LOGON_SITE
localhost"
int
LOGON_PORT
8080;
Exception{
client.getHostConfiguration().setHost(LOGON_SITE,
LOGON_PORT);
//模拟登录页面login.jsp->
main.jsp
/main.jsp"
name
name"
ld"
pass
password"
NameValuePair[]{name,pass});
status
client.executeMethod(post);
System.out.println(post.getResponseBodyAsString());
post.releaseConnection();
//查看cookie信息
CookieSpec
cookiespec
CookiePolicy.getDefaultSpec();
Cookie[]
cookies
cookiespec.match(LOGON_SITE,
LOGON_PORT,
false,
client.getState().getCookies());
(cookies.length
0)
None"
58
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- httpClient 教程