文档章节

HttpClient 模拟登陆,保持会话并进行后续操作

kongjun
 kongjun
发布于 2015/06/04 15:09
字数 352
阅读 42
收藏 1

package cc.unmi.httpclient; 
 
import org.apache.commons.httpclient.Cookie;
import org.apache.commons.httpclient.HttpClient;
import org.apache.commons.httpclient.NameValuePair;
import org.apache.commons.httpclient.cookie.CookiePolicy;
import org.apache.commons.httpclient.methods.GetMethod;
import org.apache.commons.httpclient.methods.PostMethod;
import org.junit.Test;
 
public class HttpClientLogin {
 
    public static void main(String[] args){
        //登陆 Url
        String loginUrl = "http://localhost/unmi/login.html";
 
        //需登陆后访问的 Url
        String dataUrl = "http://localhost/unmi/user_info.html?userid=123456";
 
        HttpClient httpClient = new HttpClient();
 
        //模拟登陆,按实际服务器端要求选用 Post 或 Get 请求方式
        PostMethod postMethod = new PostMethod(loginUrl);
 
        //设置登陆时要求的信息,一般就用户名和密码,验证码自己处理了
        NameValuePair[] data = {
                new NameValuePair("username", "Unmi"),
                new NameValuePair("password", "123456"),
                new NameValuePair("code", "anyany")
        };
        postMethod.setRequestBody(data);
 
        try {
            //设置 HttpClient 接收 Cookie,用与浏览器一样的策略
            httpClient.getParams().setCookiePolicy(CookiePolicy.BROWSER_COMPATIBILITY);
            httpClient.executeMethod(postMethod);
 
            //获得登陆后的 Cookie
            Cookie[] cookies=httpClient.getState().getCookies();
            String tmpcookies= "";
            for(Cookie c:cookies){
                tmpcookies += c.toString()+";";
            }
 
            //进行登陆后的操作
            GetMethod getMethod = new GetMethod(dataUrl);
 
            //每次访问需授权的网址时需带上前面的 cookie 作为通行证
            getMethod.setRequestHeader("cookie",tmpcookies);
 
            //你还可以通过 PostMethod/GetMethod 设置更多的请求后数据
            //例如,referer 从哪里来的,UA 像搜索引擎都会表名自己是谁,无良搜索引擎除外
            postMethod.setRequestHeader("Referer", "http://unmi.cc");
            postMethod.setRequestHeader("User-Agent","Unmi Spot");
 
            httpClient.executeMethod(getMethod);
 
            //打印出返回数据,检验一下是否成功
            String text = getMethod.getResponseBodyAsString();
            System.out.println(text);
 
        } catch (Exception e) {
            e.printStackTrace();
        }   
    }
}
Basic 验证的简单代码导引,还未亲试:
HttpClient client = new HttpClient();
 
// 1
client.getState().setCredentials(
    new AuthScope("unmi.cc", 80, AuthScope.ANY_REALM),
    new UsernamePasswordCredentials("username", "password")
);
 
// 2
client.getParams().setAuthenticationPreemptive(true);
 
// 3
GetMethod getMothod = new GetMethod("http://unmi.cc/twitter");
 
// 4
getMothod.setDoAuthentication( true );
 
// 5
int status = client.executeMethod( getMothod );



© 著作权归作者所有

共有 人打赏支持
kongjun
粉丝 8
博文 98
码字总数 40811
作品 0
杭州
程序员
私信 提问
WebMagic爬虫实现登陆状态保存

由于WebMagic的网络请求是通过Apache HttpClient请求,只需要拿到该对象进行登陆处理,后续的请求再使用同一个HttpClient对象请求,即可实现登陆状态下的请求,登陆相关的cookies不需要自己进...

0x5f3759df
2018/12/23
0
0
一个c#的与web服务器交互的HttpClient类

.Net类库里提供了HttpWebRequest等类,方便我们编程与Web服务器进行交互. 但是实际使用中我们经常会遇到以下需求, 基础类里没有直接提供相应的功能 (WebClient类包含这些功能,只是用起来稍微麻...

鉴客
2011/12/16
3.1K
1
HttpComponents HttpClient 4.1-beta1

HttpClient 是 HttpComponents 组件中的 HTTP 客户端的一部分。前几天 HttpComponents 发布了 HttpCore 4.1 GA 版本。 HttpClient 4.1 beta1 完成了 4.1 版本所有新规划的 API,大大的提升了...

红薯
2010/11/22
1K
0
servlet 服务端用httpclient 做网页爬虫抓取数据

是这样的,由于安全问题,数据库直接读取权限没拿到,现在服务器端用httpclient做一个模拟登陆,获取用户数据用户数,然后返给我的客户端(安卓做的),但是会出现这样的一个问题,多个人同时...

良昭
2014/04/10
316
0
HttpClient4.x模拟登陆请求保护的url

请教一下各位大神。 我需要用HttpClient4.x来模拟登陆一个网站,然后再打开里面的一个链接进行数据抓取。 HttpClient的使用策略等应该是这么样设置? 我实例出来一个HttpClient之后用它进行了...

雷超林
2013/11/22
1K
3

没有更多内容

加载失败,请刷新页面

加载更多

Navicat怎样导入Excel表格和txt文本的数据

Navicat怎样导入Excel表格和txt文本的数据 2018年07月02日 11:29:11 零碎de記憶 阅读数:2433 版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_39135287/ar...

linjin200
11分钟前
0
0
使用MaxCompute Java SDK运行安全相关命令

使用MaxCompute Console的同学,可能都使用过MaxCompute安全相关的命令。官方文档上有详细的MaxCompute 安全指南 ,并给出了安全相关语句汇总 。 简而言之, 权限管理 、 列级别访问控制 、 ...

阿里云云栖社区
15分钟前
0
0
中小公司的Java工程师应该如何逆袭冲进BAT?

(1)80% Java工程师都有的迷茫 这篇文章,跟大家聊一聊很多很多很多人问我的一个问题:中小公司的Java工程师应该如何规划准备,才能跳槽进入BAT这类一线互联网公司? 之所以我用了三个 “很...

Java填坑路
16分钟前
1
0
你的应用够安全吗?绿标2.0隐私权限详解

近日,最新一期的《绿色应用达标率调查报告》结果显示,应用在安全方面的通过率仅为57%,相较于其他四项标准通过率最低。其中隐私权限的过度获取是主要原因之一,需要开发者尽快完成整改。 ...

安卓绿色联盟
26分钟前
0
0
使用MaxCompute Java SDK运行安全相关命令

使用MaxCompute Console的同学,可能都使用过MaxCompute安全相关的命令。官方文档上有详细的MaxCompute安全指南,并给出了安全相关语句汇总。 简而言之,权限管理、列级别访问控制、项目空间...

阿里云官方博客
31分钟前
0
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部