今天在查看网络抓取运行日志时候发现腾讯微博数据获取出现异常,进行跟踪之后发现之前的模拟登陆出现了问题,确切的说是腾讯进行部分代码的调整导致登陆失败。解决思路如下:
1. 查看一下请求地址及参数是否发生变化,如下图:
结论:action、login_sig这两个参数导致登陆失败
2. 分析action、login_sig参数的来源
通过http://jsbeautifier.org/在线格式化工具进行格式化,最终的文件:h_login_11.rar 找到action参数的处理逻辑,仅仅是记录用户键盘行为,不会对登陆有影响,对应就只剩下login_sig这个参数了,但是在h_login_11.js文件中没有发现这个参数,经过分析推测不在js文件中,那就有可能在html中包含的script标签中,经过查看发现如下:
至此,参数确定完毕。
3.基于httpclient 4 来实现参见附件Weibo.rar
核心代码1 写道
/********************* 获取login_sig***********************/
HttpGet preget = new HttpGet("http://ui.ptlogin2.qq.com/cgi-bin/login?appid=46000101&style=13&lang=&low_login=1&hide_title_bar=1&hide_close_icon=1&self_regurl=http%3A//reg.t.qq.com/index.php&s_url=http%3A%2F%2Ft.qq.com&daid=6");
preget.setHeader("Host", "ui.ptlogin2.qq.com");
preget.setHeader("Referer", "http://t.qq.com/?from=11");
HttpResponse response = client.execute(preget);
String entity = EntityUtils.toString(response.getEntity());
String t=entity.substring(entity.indexOf("login_sig:"), entity.indexOf("clientip:"));
String login_sig=t.substring(t.indexOf("\"")+1, t.lastIndexOf("\""));
HttpGet preget = new HttpGet("http://ui.ptlogin2.qq.com/cgi-bin/login?appid=46000101&style=13&lang=&low_login=1&hide_title_bar=1&hide_close_icon=1&self_regurl=http%3A//reg.t.qq.com/index.php&s_url=http%3A%2F%2Ft.qq.com&daid=6");
preget.setHeader("Host", "ui.ptlogin2.qq.com");
preget.setHeader("Referer", "http://t.qq.com/?from=11");
HttpResponse response = client.execute(preget);
String entity = EntityUtils.toString(response.getEntity());
String t=entity.substring(entity.indexOf("login_sig:"), entity.indexOf("clientip:"));
String login_sig=t.substring(t.indexOf("\"")+1, t.lastIndexOf("\""));
核心代码2 写道
response = client.execute(get);
entity = EntityUtils.toString(response.getEntity());
/************************* login_sig check ****************************/
String term=entity.split(",")[2];
String url=term.substring(term.indexOf("\'")+1, term.lastIndexOf("\'"));
if (entity.indexOf("登录成功") > -1) {
get = new HttpGet(url);
response = client.execute(get);
entity = EntityUtils.toString(response.getEntity());
}
entity = EntityUtils.toString(response.getEntity());
/************************* login_sig check ****************************/
String term=entity.split(",")[2];
String url=term.substring(term.indexOf("\'")+1, term.lastIndexOf("\'"));
if (entity.indexOf("登录成功") > -1) {
get = new HttpGet(url);
response = client.execute(get);
entity = EntityUtils.toString(response.getEntity());
}
相关推荐
本文将深入探讨如何使用Java中的HttpClient4库来实现对新浪和腾讯微博的模拟登录。HttpClient4是一个强大的HTTP客户端库,它允许开发者执行HTTP请求并处理响应,非常适合进行网页交互。 首先,我们来看`Sina.java`...
在这个场景中,我们关注的是如何使用HTTPClient 4库来模拟登录新浪微博。首先,我们需要理解HTTPClient库的基本概念。 HTTPClient是一个强大的Java库,用于处理HTTP请求和响应。它提供了丰富的功能,包括支持HTTPS...
本主题将深入探讨如何使用HttpClient4库进行百度和58同城的模拟登陆操作。HttpClient4是一个强大的Java库,它提供了丰富的功能来执行HTTP请求,非常适合进行网页交互。 首先,我们来了解HttpClient4的基本用法。...
腾讯微博API封装是一个针对开发者的工具,旨在简化与腾讯微博平台的交互过程,方便开发者集成腾讯微博的功能到自己的应用中。下面将详细讲解这个过程,包括API授权、接口调用和封装方法。 首先,让我们从授权开始。...
4. 获取授权码:用户授权后,腾讯微博会重定向回我们设置的回调地址,并附带一个授权码。 5. 换取Access Token:使用App Key、App Secret和授权码,向腾讯微博API发送POST请求,换取Access Token和Access Token ...
在本文中,我们将深入探讨如何使用Java来模拟登录新浪微博,特别是在其改版后增加了复杂性的背景下。我们将不依赖新浪提供的官方API,而是通过模拟浏览器的行为,实现自动化登录和交互。 首先,我们需要理解模拟...
标题中的“免授权 自动登录发布腾讯微博”指的是一个Java开发的应用程序,它能够自动登录腾讯微博并发布微博,无需用户手动输入权限或授权信息。这个功能可能通过模拟登录过程和利用API接口来实现。 首先,我们要...
腾讯微博第三方接入是开发者通过腾讯提供的API接口,实现与腾讯微博平台的互动,允许开发者在自己的应用程序中嵌入微博功能,如发布微博、获取用户信息、转发和评论等。.NET平台接入指的是使用Microsoft的.NET框架...
这篇博客“HttpClient4模拟登录回贴”显然探讨了如何利用HttpClient4库进行网络模拟登录以及在特定网站上发布帖子。HttpClient4适用于各种场景,如自动化测试、数据抓取等,它允许开发者构建复杂的HTTP交互逻辑。 ...
httpclient4 微信公众账号模拟登陆,网络上看到的,觉得不错上传出来,供大家一起共同分享学习。
《深入剖析Android腾讯微博客户端源码》 在移动互联网领域,Android平台上的微博客户端作为社交媒体的重要组成部分,一直是开发者关注的焦点。本篇文章将基于“Android腾讯微博客户端源码”这一主题,深入探讨其中...
本篇文章将详细讲解如何利用HttpClient 4.3版本来模拟登录新版12306(中国铁路客户服务中心网站)。 1. **HttpClient介绍** HttpClient是Apache的一个开源项目,它提供了强大的HTTP协议处理能力和灵活的HTTP客户端...
总结来说,开发一个能获取新浪微博和腾讯微博@当前用户信息的C# WinForm应用,涉及的关键技术包括:理解微博API,OAuth2.0授权,使用HttpClient发送HTTP请求,JSON数据解析,以及WinForm界面设计和部署。每个环节都...
Jsoup+httpclient模拟登陆和抓取页面.pdf
在本文中,我们将深入探讨如何使用C#编程语言来实现模拟登录微博并进行内容分享,特别是在实际项目中可能遇到的挑战和技术细节。 首先,我们需要理解C#的基础知识。C#是一种面向对象的、类型安全的编程语言,由微软...
标题 "新浪腾讯微博安卓开发jar包" 描述的是一个针对Android平台开发的微博客户端所使用的库文件集合。这个集合包含了多个必要的Java Archive (JAR) 文件,这些文件是开发能够接入新浪和腾讯微博服务的应用程序所...
httpclient方式登陆,以及发布微博
在本文中,我们将深入探讨如何使用Java实现腾讯微博的OAuth2.0授权,并结合官方方法发送文本和图片。首先,让我们了解OAuth2.0的基本概念,然后详细讲解腾讯微博的TAPI(Tencent API)以及如何整合这些知识来实现所...
【Android代码-腾讯微博客户端源码1.zip】这个压缩包包含的是腾讯微博的客户端源代码,主要用于学习和研究Android应用开发。在这个项目中,我们可以深入理解一个大型社交应用的架构设计、功能实现以及性能优化等方面...