1、先get请求https://passport.baidu.com/v2/?login获取cookie

2、再通过get请求https://passport.baidu.com/v2/?login获取token

3、设置参数post请求https://passport.baidu.com/v2/api/?login登录地址,登录。

4、最后将请求百度首页就能查看到已登录。

(每次都得把cookie往后传递)

//获取cookie  请求get
        Result r1 = SendRequest.sendGet("https://passport.baidu.com/v2/?login", null, null, "GBK");
        //设置参数
        Map<String, String> params = new HashMap<String, String>();
        params.put("class", "login");
        params.put("tpl", "mn");
        params.put("tangram", "true");
        //获取头部信息
        Map<String, Header> headers = r1.getHeaders();
        //设置头部参数
        Map<String, String> headerMap = new HashMap<String, String>();
        for(String str : headers.keySet()){
        headerMap.put(str, headers.get(str).toString().substring(str.length()+2));
        }
        //设置cookie
        headerMap.put("Cookie", r1.getCookie());
        //请求获取token
        Result r = SendRequest.sendGet("https://passport.baidu.com/v2/api/?getapi&class=login&tpl=mn&tangram=true", headerMap, params, "GBK");
        //设置登录参数
        Map<String, String> params2 = new HashMap<String, String>();
        params2.put("class", "login");
        params2.put("tpl", "mn");
        params2.put("tangram", "true");
        params2.put("username", "账号");
        params2.put("password", "密码");
       
        params2.put("token", r.getToken());
        params2.put("isPhone", "false");
        params2.put("loginType", "1");
        params2.put("verifycode", "");
       
        params2.put("callback", "parent.bdPass.api.login._postCallback");
         
        //设置cookie   只需设置cookie  设置其他header参数会导致报错
        Map<String, String> headerMap2 = new HashMap<String, String>();
        headerMap2.put("Cookie", r.getCookie());
        //post登录请求
        Result result = SendRequest.sendPost("https://passport.baidu.com/v2/api/?login", headerMap2, params2, "UTF-8");
        //判断是否登录成功
        Map<String, String> headerMap3 = new HashMap<String, String>();
        //一定要设置cookie  否则会未登录
        headerMap3.put("Cookie", result.getCookie());
        //请求百度首页
        SendRequest.sendGet("http://www.baidu.com", headerMap3, null, "UTF-8");

SendRequest类

package com.li.utli;import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;import org.apache.http.Header;
import org.apache.http.HttpEntity;
import org.apache.http.HttpHost;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.conn.params.ConnRoutePNames;
import org.apache.http.cookie.Cookie;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.message.BasicHeader;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.protocol.HTTP;import com.li.bean.Result;/*** 发送请求* * @author Legend、* */public class SendRequest {// 实例化一个Httpclient的
//  static DefaultHttpClient client = new DefaultHttpClient();static {//       // 设置代理
//      HttpHost proxy = new HttpHost("192.168.13.19", 7777);
//      client.getParams().setParameter(ConnRoutePNames.DEFAULT_PROXY, proxy);}// 这是模拟get请求public static Result sendGet(String url, Map<String, String> headers,Map<String, String> params, String encoding, boolean duan)throws ClientProtocolException, IOException {DefaultHttpClient client = new DefaultHttpClient();// 如果有参数的就拼装起来 三目运算url = url + (null == params ? "" : assemblyParameter(params));// 这是实例化一个get请求HttpGet hp = new HttpGet(url);// 如果需要头部就组装起来if (null != headers)hp.setHeaders(assemblyHeader(headers));// 封装返回的参数Result result = new Result();// 执行请求后返回一个HttpResponseHttpResponse response = client.execute(hp);HttpEntity entityRsp = response.getEntity();StringBuffer result1 = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(entityRsp.getContent(), HTTP.UTF_8));String tempLine = rd.readLine();while (tempLine != null) {//获取百度tokenif (tempLine.contains("bdPass.api.params.login_token=")) {// System.out.println(tempLine.substring("bdPass.api.params.login_token=".length()+1,tempLine.length()-2));result.setToken(tempLine.substring("bdPass.api.params.login_token=".length() + 1,tempLine.length() - 2));}result1.append(tempLine);tempLine = rd.readLine();}System.out.println(result1.toString());// 如果为true则断掉这个get请求if (duan)hp.abort();// 返回一个HttpEntityHttpEntity entity = response.getEntity();// 设置返回的cookieresult.setCookie(assemblyCookie(client.getCookieStore().getCookies()));// 设置返回的状态result.setStatusCode(response.getStatusLine().getStatusCode());// 设置返回的头部信心result.setHeaders(response.getAllHeaders());// 设置返回的信息result.setHttpEntity(entity);return result;}public static Result sendGet(String url, Map<String, String> headers,Map<String, String> params, String encoding)throws ClientProtocolException, IOException {return sendGet(url, headers, params, encoding, false);}// 这是模拟post请求public static Result sendPost(String url, Map<String, String> headers,Map<String, String> params, String encoding)throws ClientProtocolException, IOException {// 实例化一个post请求HttpPost post = new HttpPost(url);DefaultHttpClient client = new DefaultHttpClient();// 设置需要提交的参数List<NameValuePair> list = new ArrayList<NameValuePair>();if (params != null) {for (String temp : params.keySet()) {list.add(new BasicNameValuePair(temp, params.get(temp)));}}post.setEntity(new UrlEncodedFormEntity(list, encoding));// 设置头部if (null != headers)post.setHeaders(assemblyHeader(headers));// 实行请求并返回HttpResponse response = client.execute(post);HttpEntity entity = response.getEntity();HttpEntity entityRsp = response.getEntity();StringBuffer result1 = new StringBuffer();BufferedReader rd = new BufferedReader(new InputStreamReader(entityRsp.getContent(), HTTP.UTF_8));String tempLine = rd.readLine();// 封装返回的参数Result result = new Result();while (tempLine != null) {//返回获取请求地址if (tempLine.contains("encodeURI('")) {// System.out.println(tempLine.substring("bdPass.api.params.login_token=".length()+1,tempLine.length()-2));// result.setToken(tempLine.substring("bdPass.api.params.login_token=".length()+1,tempLine.length()-2));result.setToken(tempLine.substring(tempLine.indexOf("encodeURI('") + 11,tempLine.indexOf("');")));}result1.append(tempLine);tempLine = rd.readLine();}System.out.println(result1.toString());// 设置返回状态代码result.setStatusCode(response.getStatusLine().getStatusCode());// 设置返回的头部信息result.setHeaders(response.getAllHeaders());// 设置返回的cookie信心result.setCookie(assemblyCookie(client.getCookieStore().getCookies()));// 设置返回到信息result.setHttpEntity(entity);return result;}// 这是组装头部public static Header[] assemblyHeader(Map<String, String> hashMap) {Header[] allHeader = new BasicHeader[hashMap.size()];int i = 0;for (String str : hashMap.keySet()) {Header header = new BasicHeader(str, hashMap.get(str));allHeader[i++] = header;// i++;// i = i +1;s}return allHeader;}// 这是组装cookiepublic static String assemblyCookie(List<Cookie> cookies) {StringBuffer sbu = new StringBuffer();for (Cookie cookie : cookies) {sbu.append(cookie.getName()).append("=").append(cookie.getValue()).append(";");}if (sbu.length() > 0)sbu.deleteCharAt(sbu.length() - 1);return sbu.toString();}// 这是组装参数public static String assemblyParameter(Map<String, String> parameters) {String para = "?";for (String str : parameters.keySet()) {para += str + "=" + parameters.get(str) + "&";}return para.substring(0, para.length() - 1);}
}

httpclient登录百度https登录地址相关推荐

  1. 第三方登录→百度第三方登录

    如何从第三方百度账号登录 前提条件:要有自己的服务器和域名(不需要经过备案). 一,先在百度开发者中心上注册自己的账号 二,鼠标放在右上角自己账户名称上,选择进入应用管理界面, 三,创建工程:创建成功 ...

  2. java 利用httpclient绕过百度验证登录爬取百度指数

    公司要求爬取百度指数的相关信息,发现需要百度登录验证.网上找了很多相关文章,都是用来模拟登录的过程,经过一番尝试,发现太复杂,最后失败.于是,换种方式,直接绕过登录.具体方式如下: 分析请求内容 我用 ...

  3. QQ、微信、新浪微博和百度第三方登录

    对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取AppKey和A ...

  4. 实现QQ、微信、新浪微博和百度第三方登录(Android Studio)

    实现QQ.微信.新浪微博和百度第三方登录(Android Studio) 前言: 对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第 ...

  5. Android 实现QQ、微信、新浪微博和百度第三方登录

    前言:  对于大多数的APP都有第三方登录这个功能,自己也做过几次,最近又有一个新项目用到了第三方登录,所以特意总结了一下关于第三方登录的实现,并拿出来与大家一同分享: 各大开放平台注册账户获取App ...

  6. python ssl socket_Python使用Socket(Https)Post登录百度的实现代码

    登录百度,首先当然是先抓百度的登录包 ,由于是网页登录,最方便的自然是httpwatch了,我使用的测试账号是itiandatest1,密码是itianda,抓包结果: POST /?login HT ...

  7. 李昱:百度产品登录协议介绍

    我只是分享一下技术思路而已,其他都与我无关哦....你懂得. 一.python实现代码 def Get_baidu_msgs(self,model,pushitem,**kwargs):"& ...

  8. 爬虫三(Bs4搜索、Selenium基本使用、无界面浏览器、Selenium自动登录百度案例、自动获取12306登录验证码案例、切换选项卡、浏览器前进后退、登录Cnblogs获取Cookie自动点赞)

    文章标题 一.Bs4搜索文档树 二.CSS选择器 三.selenium基本使用 四.无界面浏览器 五.selenium其他使用 1)自动登录百度案例 2)获取位置属性大小.文本 3)自动获取12306 ...

  9. Python模拟二维码登录百度

    模拟二维码登录百度 写在前面 准备工作 二维码地址 登录状态 获取gid 登录参数 代码部分 二维码展示 获取cookie 完整代码 写在后面 写在前面 前段时间写了利用BDUSS到达百度首页,这一次 ...

  10. python123练习题文库_python模拟登录百度文库后如何点击马上签到

    这是登录的代码: #-*- coding: UTF-8 -*- import HTMLParser import urlparse import urllib import urllib2 impor ...

最新文章

  1. Java 读写Properties配置文件
  2. 临河智慧城管:让城市更和谐
  3. macOS下nginx配合obs做推流直播.md
  4. html5怎么要文字飘起来,html分享之一个超级炫酷的-404飞起来了
  5. H5开发 连接蓝牙打印机 打印标签(斑马ZR628)
  6. VS2005混合编译ARM汇编代码
  7. 芯片项目谁支持谁负责 重大损失将予以通报
  8. Nginx 模块的使用
  9. python封装c接口_用C为python3.1封装mysql接口(一)
  10. Callgrind:调用图生成缓存和分支预测分析器
  11. Eclipse启动SpringCloud微服务集群的方法
  12. 【转】Cache Buffer Chain 第二篇
  13. 算法高级(30)-外卖凑单算法-为什么每次点外卖你怎么都凑不够那碗卤肉饭呢?
  14. linux led测试程序,Linux中加入led驱动及测试程序详解
  15. 只想做程序员的钢铁侠埃隆·马斯克,是如何成为亿万富翁的?
  16. Java基础-零拷贝技术应用案例
  17. Asp.Net SignalR 集群会遇到的问题
  18. 【黑马Java笔记+踩坑汇总】JavaSE+JavaWeb+SSM+SpringBoot+瑞吉外卖+SpringCloud/SpringCloudAlibaba+黑马旅游+谷粒商城
  19. css 文本和div垂直居中方法汇总
  20. 360数科知微实验室发布反诈报告:揭秘黑灰产数据流转真相

热门文章

  1. docker---dockerfile 编写优化
  2. python实现多接口翻译软件
  3. java微博自动转发_被「李笑来老师」拉黑之「JavaScript微博自动转发的脚本」
  4. win10开机就卡死在桌面上怎么解决
  5. input 框隐藏光标问题
  6. 《SpringCloud Alibaba 微服务架构》专题(二十三)-Seat工作原理
  7. JRebel: ERROR Failed to obtain seat. Unable to connect to license server. Check
  8. Typora图片上传问题
  9. 俄亥俄州立大学计算机科学转学成功,托福97,我是如何转学成功的?
  10. vscode Run coder 支持c++11