模拟登录百度做一些事

最近写了一个程序,模拟登录百度进行一些操作,例如下载文库文档,网盘,修改个人信息等等,分析过程很痛苦,但是做完之后回头想想还是很意思的。代码有点乱,我不整理了,这里分享一下模拟百度相关原理与相关代码,以及一些注意事项。我比较热爱各种抓包,之前做过模拟新浪微博登录、发微博,转发、评论等操作,有兴趣的程序员可以一起交流。

我使用的是java去模拟,apache下的core包。抓包工具我用的是Httpwatch pro和firebug。

Httpclinet 官方API:http://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/

Httpclient LIB以及DEMO下载地址:http://hc.apache.org/downloads.cgi.

登录代码已整理:http://blog.csdn.net/programmer_sir/article/details/43193611

百度登录源码及LIB下载地址:http://download.csdn.net/detail/programmer_sir/8400495

 一、百度登录原理。

 1、访问http://www.baidu.com生成cookie,cookie里有一个BAIDUID。

 2、访问https://passport.baidu.com/v2/api/?getapi&tpl=mn&apiver=v3&class=login&logintype=dialogLogin,得到token。

{"errInfo":{ "no": "0" }, "data": { "rememberedUserName" : "sir_belen", "codeString" : "", "token" : "a5ff667c0360dbdcb43cae85018e3e97", "cookie" : "1", "usernametype":"1", "spLogin" : "rate", "disable":"", "loginrecord":{ 'email':[ ], 'phone':[ ] } }}

 3、访问https://passport.baidu.com/v2/api/?login,登录为POST,需要的将登录参数传过去。


// 登录POST参数。private List<NameValuePair> produceFormEntity() throws UnsupportedEncodingException{List<NameValuePair> list = new ArrayList<NameValuePair>();list.add(new BasicNameValuePair("tt", ""+System.currentTimeMillis()));list.add(new BasicNameValuePair("tpl", "mn"));list.add(new BasicNameValuePair("token", token));list.add(new BasicNameValuePair("isPhone", ""));list.add(new BasicNameValuePair("username", username));list.add(new BasicNameValuePair("password", password));list.add(new BasicNameValuePair("verifycode", verifycode));list.add(new BasicNameValuePair("codestring", codestring));return list;}
 4、访问http://www.baidu.com。搜索是否有登录两字,若没有说明登录成功!


二、注意事项:

1、要得到token必须要先预访问一下百度,只有获取到BAIDUID才能获取到token。

2、登录返回结果如下:

<!DOCTYPE html><html><head><meta http-equiv=Content-Type content="text/html; charset=UTF-8"></head><body><script>var href = decodeURIComponent("http:\/\/www.baidu.com\/cache\/user\/html\/v3Jump.html")+"?"var accounts = '&accounts='href += "err_no=0&callback=parent.bd__pcbs__3tp8m3&codeString=&userName=sir_belen&phoneNumber=&mail=&hao123Param=UkxUbFU0V2tWSlpscC1OR3RLTkhsU2RVTlVWVFpsYVhsbFRVbHhka3BWUVhVNFkzbEpOSEJyUlU1alEzQlZRVkZCUVVGQkpDUUFBQUFBQUFBQUFBRUFBQUFDRFRJZGMybHlYMkpsYkdWdUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBM2pBbFFONHdKVVNE&u=http://www.baidu.com/s%3Fbs%3D%25E7%2599%25BE%25E5%25BA%25A6%25E7%25BD%2591%25E7%259B%2598%25E7%2599%25BB%25E9%2599%2586%26f%3D3%26rsv_bp%3D1%26rsv_spt%3D3%26oq%3D%25E7%2599%25BE%25E5%25BA%25A6%25E7%25BD%2591%25E7%259B%2598%26rsp%3D2%26inputT%3D1624%26tn%3Dbaidu%26ie%3Dutf-8%26wd%3D%25E7%2599%25BE%25E5%25BA%25A6%25E7%25BD%2591%25E7%259B%2598%25E6%2590%259C%25E7%25B4%25A2%25E5%25BC%2595%25E6%2593%258E%26rsv_sug3%3D6%26rsv_sug4%3D76%26rsv_sug1%3D6%26rsv_sug2%3D1%26rsv_sug%3D2&tpl=&secstate=&gotourl=&authtoken=&loginproxy=&resetpwd=&vcodetype=&lstr=<oken=&bckv=1&bcsync=W5zkqgOHIqvzP2dSHFvxQSKUiIr9D4rDjYJVtVgWV8R1%2FhxlTPdebvE9CnqW9QwX2Z06SDpX2ZS7bwbKRkzgXZZPS%2Fiy55wg39sQJJGA5bqxJG%2BOCgXLwcGk74YwxZNtxZev8gVFi3QzyRHn7gEoKx9S3lfyFIvxW6%2BOmu80ZjPghWWWYDzVFAUVJ3XHO3lqdQ40vDn5KPoMmNecbOGxSWnBT2vGt9lhcRrK%2B%2BVahmf8GVuUoYES145FnNR3ET1z3B8CsIXLI5QyQgSEHpQvv%2Fy6PwI5RwiwNjokhD3yie1%2BVOIuh2hOsr7FsJeoUKCAxmdAUgyI39H0GlZnn0D5Hw%3D%3D&bcchecksum=1367615822&bctime=1409475342"+accounts;if(window.location){window.location.replace(href);
}else{document.location.replace(href); 
}
</script>

请注意第四行的err_no以及codeString。

err_no相关参数意思,参照以下代码:

int code = Integer.parseInt((String)json.get("err_no"));switch (code) {case 0: // 登录成功。m.setStatusCode(200);break;case 4: // 密码错误。m.setStatusCode(6);m.setO(json);break;case 5: // 帐号被百度认定为异常,需要去百度(www.baidu.com)验证手机号。m.setStatusCode(5);break;case 6: // 验证码错误。m.setStatusCode(4);m.setO(json);break;case 257:// 需要填写验证码。m.setStatusCode(3);m.setO(json);break;case 120019: // 帐号被百度认定为异常,需要去百度(www.baidu.com)验证手机号。m.setStatusCode(5);break;default: // 其它原因,请联系工作人员。m.setStatusCode(500);break;}

codeString是验证码,如果不为空说明需要输入验证码,如果出现验证码的问题,可以将图片下载到本地服务器。

然后让用户看图片填写验证码,登录时将验证码与codeString带过去即可。

3、Httpclient core能自动管理Cookie,在模拟登录时保证client是同一个,且多个地方使用到get或post请求,可以将httpclient封装一下。这里我写的是单例,以保证HTTP请求是同一个。这样登录成功后管理或下载百度相关的,例如获取个人信息,下载百度文库或其它操作都不会有问题了。

package com.baidu.service;import java.util.List;import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NameValuePair;
import org.apache.http.client.CookieStore;
import org.apache.http.client.HttpClient;
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.client.methods.HttpUriRequest;
import org.apache.http.client.protocol.ClientContext;
import org.apache.http.impl.client.BasicCookieStore;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager;
import org.apache.http.protocol.BasicHttpContext;
import org.apache.http.protocol.HttpContext;import com.baidu.util.Log;@SuppressWarnings("deprecation")
public class BaiduConnectService {private CookieStore cookieStore = new BasicCookieStore();private BaiduConnectService(){}private static class BaiduConnectServiceContainer{private static BaiduConnectService bc = new BaiduConnectService();}public static BaiduConnectService getInstance(){Log.logInfo("init BaiduConnectService.");return BaiduConnectServiceContainer.bc;}public HttpResponse execute(String url) throws Exception{return this.execute(url,null);}public HttpResponse execute(String url, List<NameValuePair> params) throws Exception{HttpClient httpClient = new DefaultHttpClient(new ThreadSafeClientConnManager());HttpResponse response = null;HttpUriRequest request = null;if (params != null) {HttpPost httpPost = new HttpPost(url);try {HttpEntity postBodyEnt = new UrlEncodedFormEntity(params);httpPost.setEntity(postBodyEnt);} catch (Exception e) {e.printStackTrace();}request = httpPost;} else {HttpGet httpGet = new HttpGet(url);request = httpGet;}HttpContext localContext = new BasicHttpContext();localContext.setAttribute(ClientContext.COOKIE_STORE, cookieStore);response = httpClient.execute(request, localContext);Log.logInfo("Request URL:"+url);Log.logRed("[Status:" + response.getStatusLine().getStatusCode()+"]");return response;}public CookieStore getCookieStore() {return cookieStore;}public void setCookieStore(CookieStore cookieStore) {this.cookieStore = cookieStore;}
}

4、我的代码中没有在请求添加头信息,例如Host,User-Agent之类的,百度登录这块是不需要添加的。

5、以下是我做的一个小系统的部分功能页面,供参考:模拟登录百度、验证码、搜索并下载百度文库、搜索并下载网盘等。

1)登录百度

2)密码输入错误三次,百度会出现验证码,下载验证码。

3)验证码输入后,模拟调用百度验证接口,检测验证码输入是否正确 。

更换验证码请求地址:

https://passport.baidu.com/v2/?reggetcodestr&token="+ getToken(getCookies()) + "&tpl=mn&apiver=v3&tt="+ System.currentTimeMillis() + "&fr=login


检测验证码输入是否正确请求地址:

https://passport.baidu.com/v2/?checkvcode&token="+ getToken(getCookies()) + "&tpl=mn&apiver=v3&tt="+System.currentTimeMillis()+"&verifycode="+verifycode+"&codestring="+codeString

4)登录成功后搜索JAVA,并选择一个文件进行下载。

5)下载百度文库时百度发现异常,有时候需要输入验证码。

6)输入验证码后,点击“提交”。

7)下载百度文库成功!


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/55475.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

微信网页PC端登录扫二维码登录

最近搞得PC端扫二维码登录&#xff0c;写了个控制器&#xff0c;把方法和注意事项都整理了一下&#xff0c;给大家共同学习下。 先说步骤吧&#xff1a; 1.注册微信开放平台https://open.weixin.qq.com&#xff0c;一定要清楚微信开放平台和微信公众平台是分别独立的&#xff0…

微信网页版登陆原理

微信网页版登陆原理 请求微信服务器返回一个会话ID 微信Web版本不使用用户名和密码登录&#xff0c;而是采用二维码登录&#xff0c;所以服务器需要首先分配一个唯一的会话ID&#xff0c;用来标识当前的一次登录&#xff0c;通过请求地址&#xff1a; https://login.weixin.qq.…

web网页登录

web登录验证 1.创建loginDemo项目 2.添加tomcat 3.在web目录下创建jsp文件login fail success UserData 4.修改web.xml设置首页 5.演示 欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器…

百度登录界面

1 <!doctype html>2 <html lang"en">3 <head>4 <meta charset"UTF-8">5 <title>百度一下</title>6 <meta name"Keywords" content"关键字">7 <meta name"Descript…

pc端网页实现微信扫码登录

微信开发文档&#xff1a;https://developers.weixin.qq.com/doc/oplatform/Website_App/WeChat_Login/Wechat_Login.html 点击按钮&#xff0c;跳转到微信授权页面&#xff0c;会出现一个二维码。 //拉取授权页面 let APPID 网页应用的appid let REDIRECT_URI encodeUR…

电脑wifi只能微信聊天但是不能打开百度上网

问题描述&#xff1a;WiFi手机可以连接&#xff0c;电脑上也能连接&#xff0c;可以微信聊天&#xff0c;但是不能浏览器上网&#xff0c;显示域名解析错误。 背景:小编过了年回来上班后&#xff0c;发现公寓里的无线网在电脑上无法访问互联网&#xff0c;就非常的纳闷。首先我…

高级程序员和新手小白程序员区别你是那个等级看解决bug速度

IT入门深似海 ,程序员行业&#xff0c;我觉得是最难做的。加不完的班&#xff0c;熬不完的夜。 和产品经理&#xff0c;扯不清,理还乱的宿命关系 一直都在 新需求-做项目-解决问题-解决bug-新需求 好像一直都是这么一个循环。&#xff08;哈哈哈&#xff09;我觉得一个好的程序…

微软Office Plus吊打WPS Office?不一定,WPS未来被它“拿捏”了

微软Office Plus吊打WPS Office&#xff1f; 微软的Office是一款非常强大的软件。不仅仅在办公领域中能给我们带来便利&#xff0c;在娱乐和生活的各个方面的管理也能带来很多便利。 当然&#xff0c;作为国产办公软件的排头兵WPS与微软Office的抗衡已经有长达30多年&#xf…

百度的文心一言 ChatGTP 的对比

同样的5个问题&#xff0c;让百度的“文心一言”与ChatGPT来回答&#xff0c;两者区别在于&#xff0c;前者是就坡下驴的“傻瓜”式回复&#xff0c;后者是细思极恐的AI脱口秀。抛开高下立判不谈&#xff0c;尽管百度十年磨一剑专攻人工智能&#xff0c;但和国外的AI产业相比&a…

毕业写论文不要傻傻的到中国知网CNKI充值了,分享几个常用的写论文必备的网站!

我把这 7 个工具&#xff0c;发给了毕业两年的学姐&#xff01;看完学姐都懵了&#xff0c;说&#xff1a;早知道有这么好的资源&#xff0c;当年在学校写毕业论文也不会那么痛苦了&#xff01; 1、搜论网 找学术论文&#xff0c;就上搜论网 www.soolun.com为老师、学生、媒…

【快速写好毕业论文】你不得不知晓的七个常用文献搜索平台

本篇推文共计2000个字&#xff0c;阅读时间约3分钟。 01 引言 又是一年的毕业季&#xff0c;毕业论文成为了大多数同学们难以逾越的屏障。 毕业论文存在以下特点&#xff1a; 章节多、页码多、图表多、文献多、编号多。 那么如何快速写好毕业论文&#xff0c;安稳度过学生阶段最…

大数据时代,我竟然在用Excel和SPSS做数据分析,真香!

目录 写在前面概述什么是统计?统计.计算机与统计软件(重点)变量及其分类数据收集 第二章问卷的组成和结构几种典型的问卷题型: 第三章:数据的录入和清理数据的录入数据的清理3.4在Excel中核对数据建立调查问卷的SPSS数据文件 第4章单变量的一维频率分析利用SPSS对单选题进行一…

教你接入Midjourney,不用梯子也能玩

1、效果 话不多说&#xff0c;先上最终出图效果&#xff0c; 我给的关键词是一只白色的猫 2、接入流程 API文档可以来这里查&#xff08;可以白嫖100次midjourney出图和10次gpt4体验&#xff09;&#xff0c;我这里精简一下接入流程&#xff0c;方便大家快速接入 2.1、文字生…

超级编程AI登上Science封面!AlphaCode编程大赛卷趴一半程序员

【导读】在编程比赛中达到人类水平的AlphaCode&#xff0c;再登Science封面。 这个12月&#xff0c;正当OpenAI的ChatGPT势头正旺时&#xff0c;那个曾经卷趴一半程序员的AlphaCode登上Science封面了&#xff01; 论文链接&#xff1a;https://www.science.org/doi/10.1126/sc…

斯坦福2023【FrugalGPT】减少大模型的商业化应用成本

文章目录 主要解决问题采用什么方法Prompt adaptationLLM approximationLLM cascade 实验结论讨论与展望 FrugalGPT: How to Use Large Language Models While Reducing Cost and Improving Performance 主要解决问题 这篇文章主要是要解决如何降低调用大语言模型的成本(Chat…

智见|黄铁军:未来的大模型生态中将会只有少数赢家

2023智源大会可谓群星璀璨。中外200余位人工智能顶级专家参会&#xff0c;人工智能领域最关键的人物、机构悉数亮相。 全面、专业、前沿&#xff0c;会场上大咖们观点激荡、多元碰撞&#xff0c;会场下观众们兴奋异常、座无虚席。 会上&#xff0c;北京智源人工智能研究院院长黄…

开放丨Kaldi语音识别理论与实践

语音识别是一门涉及数字信号处理、人工智能、语言学、数理统计学、声学、情感学及心理学等多学科交叉的科学。这项技术可以提供比如自动客服、自动语音翻译、命令控制、语音验证码等多项应用。近年来&#xff0c;随着人工智能的兴起&#xff0c;语音识别技术在理论和应用方面都…

【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍

由CCF语音对话与听觉专委会 、中国人工智能产业发展联盟&#xff08;AIIA&#xff09;评估组、快商通、语音之家、北京希尔贝壳科技有限公司共同主办的【语音之家】AI产业沙龙—VoxSRC-22说话人识别挑战赛快商通方案介绍&#xff0c;将于2022年10月9日18:30-19:30线上直播。 沙…

说话人识别(speaker Recognition/Verification)简介

1.分类 2.研究方向 说话人识别研究方向主要有三个&#xff1a; 语音信号参数化&#xff1a;即提取音频特征spectral features&#xff0c;目前主流研究都采用MFCCs系数&#xff0c;以及其Δ和ΔΔ系数(即时间上的一阶导数和二阶导数)。什么是MFCC系数以及如何提取可以看这个…

听障人士亲述:我们在VRChat用手语交流,成员规模5000人

如果你在B站上搜索VRChat&#xff0c;排在前面的热门视频几乎都是与老外聊天的内容。除了练习语言、交文化流外&#xff0c;你还能在VRChat上遇到不少哇哇乱叫的小孩。作为一款VR社交应用&#xff0c;除了有趣的小游戏外&#xff0c;说话聊天也是VRChat关键的玩法之一。 而有这…