Z5zAlex 2011-05-16 22:35
浏览 271
已采纳

java httpclient问题

用httpclient模拟登录一个网站,返回状态码(301或302等),我想不要处理返回状态码,直接用postMethod导向我要的页面,可以不考虑跳转吗?(不是说httpclient自动管理cookie,跳转应该可以忽略吧,哈哈,我的理解),求高手解释啊

  • 写回答

4条回答 默认 最新

  • iihero 《SybaseASE15.X全程实践》书籍作者 2011-05-17 06:07
    关注

    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]

    同时请参考一下下文,有些地方解释的非常详细。

    http://yefeng.iteye.com/blog/112565

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(3条)

报告相同问题?

悬赏问题

  • ¥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自定义网络