用httpclient模拟登录一个网站,返回状态码(301或302等),我想不要处理返回状态码,直接用postMethod导向我要的页面,可以不考虑跳转吗?(不是说httpclient自动管理cookie,跳转应该可以忽略吧,哈哈,我的理解),求高手解释啊
4条回答 默认 最新
关注 HttpClient支持自动转向处理,但是象POST和PUT方式这种要求接受后继服务的请求方式,暂时不支持自动转向,因此如果碰到POST方式提交后返回的是301或者302的话需要自己处理。
参考下例:
[code="java"]httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
httpClient.getHostConfiguration().setHost("www.xiaonei.com", 80, "http");
String url = "http://login.xiaonei.com/Login.do";
PostMethod method = new PostMethod(url);
NameValuePair email = new NameValuePair( "email" , "" );//邮箱
NameValuePair password = new NameValuePair( "password" , "" );//密码
method.addRequestHeader("Content-Type","application/x-www-form-urlencoded;charset=gb2312");
NameValuePair[] data = { email,password};
method.setRequestBody(data);
try {httpClient.executeMethod(method);
Cookie[] cookies=httpClient.getState().getCookies();
httpClient.getState().addCookies(cookies);
method.releaseConnection();
int state = method.getStatusCode();// System.out.print(state);
String newUrl = "";
if ((state == HttpStatus.SC_MOVED_TEMPORARILY) || (state == HttpStatus.SC_MOVED_PERMANENTLY) || (state == HttpStatus.SC_SEE_OTHER) || (state == HttpStatus.SC_TEMPORARY_REDIRECT)){
Header header = method2.getResponseHeader("location");
if(header != null){
newUrl = header.getValue(); //获得跳转页面地址
//System.out.println("newUrl: "+newUrl);
if(newUrl == null || newUrl.equals("")){
newUrl = "/";
}
String urlx=null;
//以get方式请求跳转页面
GetMethod getMethod = new GetMethod(newUrl);
getMethod.setRequestHeader("Cookie",cookies.toString());
httpClient.excuteMethod(getMethod);
getMethod.releaseConnection();
urlx="rundll32 url.dll,FileProtocolHandler "+newUrl;
Runtime.getRuntime().exec("cmd.exe /c start "+ urlx);[/code]同时请参考一下下文,有些地方解释的非常详细。
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 模电中二极管,三极管和电容的应用
- ¥15 关于模型导入UNITY的.FBX: Check external application preferences.警告。
- ¥15 气象网格数据与卫星轨道数据如何匹配
- ¥100 java ee ssm项目 悬赏,感兴趣直接联系我
- ¥15 微软账户问题不小心注销了好像
- ¥15 x264库中预测模式字IPM、运动向量差MVD、量化后的DCT系数的位置
- ¥15 curl 命令调用正常,程序调用报 java.net.ConnectException: connection refused
- ¥20 关于web前端如何播放二次加密m3u8视频的问题
- ¥15 使用百度地图api 位置函数报错?
- ¥15 metamask如何添加TRON自定义网络