HttpClient处理登录问题

本篇博客简单介绍两种处理登录问题的解决方法,具体各位的问题,请具体问题具体分析,辩证解决。


我们在这里讲的两种处理登录问题的方式是针对于不同的需求所做出的方案。

  1. 使用参数登录
    适用于需要多次登录访问抓取信息的网站
  2. 使用Cookie登录
    适用于一次登录抓取完数据后就完事的网站

使用参数登录

一般情况下,登录请求都是需要使用POST请求来完成操作的,当然也不排除使用GET请求直接在url里带参数访问的情况。下面都会说明怎么处理。

  1. POST

    HttpPost post = new HttpPost("http://localhost/login");
    //将参数拼成string
    String properties = "username=" + username + "&password=" + password;
    //然后通过ByteArrayEntity(string.getBytes())将参数设置到post请求中
    post.setEntity(new ByteArrayEntity(properties.getBytes()));
  2. GET

    //将参数直接跟在url后面
    String url = "http://localhost/login?username=" + username + "&password=" + password;
    HttpGet get = new HttpGet(url);

    完整代码:

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.HttpClients;

import java.io.IOException;

public class CookieTest {
    public static void main(String[] args) {
        HttpClient httpClient = HttpClients.custom().build();
        //一般需要登录的网页都是POST请求
        HttpPost post = new HttpPost("http://localhost/login");

        try {
            //这里和上面介绍POST请求的参数设置方式不一样,两种方式都可以,我个人喜欢上面那种
            List<NameValuePair> params = new ArrayList<NameValuePair>();
            params.add(new BasicNameValuePair("username", username));
            params.add(new BasicNameValuePair("password", password));
            //这里的HTTP.UTF_8在我目前的HttpClient版本已经不能用了,如果你的也不能用,那就向下面的页面文本那样直接设置成字符串就ok
            post.setEntity(new UrlEncodedFormEntity(params, HTTP.UTF_8));

            //GET和POST以下一样,解析post请求
            HttpResponse response = httpClient.execute(post);
            //拿到响应的实体
            HttpEntity entity = response.getEntity();
            //打印响应的状态行
            System.out.println(response.getStatusLine());
            //拿到页面文本
            String content = IOUtils.toString(entity.getContent(), "utf-8");
            //打印文本
            System.out.println(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

使用Cookie登录

使用Cookie的情况有很多,通常登录后浏览器会记录你登录网站时生成的cookie信息,下次浏览器会直接使用cookie信息访问网站,这就是我们使用浏览器访问网站时,登陆一次之后下次可以直接访问的原因。
我们在这里就是模拟浏览器的这种行为,直接获取cookie信息,然后带着cookie信息去访问网站。这种情况多用于只对某个网站的数据抓一次,之后就不会再理会的情况。

还有就是关于设置cookieGETPOST请求的设置方式一样这里就不再赘述了。
直接上代码:

import org.apache.commons.io.IOUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.ByteArrayEntity;
import org.apache.http.impl.client.HttpClients;
import org.apache.xmlbeans.impl.common.IOUtil;

import java.io.IOException;

public class CookieTest {
    public static void main(String[] args) {
        HttpClient httpClient = HttpClients.custom().build();
        //一般需要登录的网页都是POST请求
        HttpPost post = new HttpPost("http://localhost/login");
        //找到登录后Cookie信息,在这里设置之后就可以直接访问了
        post.addHeader("Cookie", "COLLOCK=98136498912679ID;");

        try {
            HttpResponse response = httpClient.execute(post);
            HttpEntity entity = response.getEntity();
            System.out.println(response.getStatusLine());
            String content = IOUtils.toString(entity.getContent(), "utf-8");
            System.out.println(content);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

其实关于登录,这里只讲了最简单的情况,实际运用中会发现,登录一般都不是简单的发一个请求就可以完成的。一般都会伴随着页面的跳转和验证。如果遇到这种问题,那就需要大家多一点耐心,慢慢寻找登录的完整逻辑链了。

以上。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值