HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博
HttpClient4,最原始的需求就是使用其来模拟浏览器想服务器发起http请求,当然,他的功能不止于此,但是我需要的就是这个功能而已,jdk也有其自带的类似的api:UrlConnection,效率比httpclient高,但是和其他第三方产品一样,比httpclient原始,其实http协议是在tcp/ip协议之上的,所以,如果是用socket来实现也是可以的,只不过更原始了,没这个必要了!
Httpclient4和Httpclient3的区别较大,但如果会用一个,另一个只要看一下例子或api就会用了,简单!
实例化一个client,设置策略:
DefaultHttpClient client = new DefaultHttpClient();
//设置 HttpClient 接收 Cookie,用与浏览器一样的策略
client.getParams().setParameter("http.protocol.cookie-policy",
CookiePolicy.BROWSER_COMPATIBILITY);
实例化一个Post方法:
这里的gsid是微博是否登录成功的关键,相关知识是在模拟微博登录的过程中的,后来我还发现还有一个st的参数也是必不可少的,这个参数也可以通过登录之后分析获取。就是这么简单。
HttpPost post = new HttpPost("http://weibo.cn/mblog/sendmblog?vt=4&gsid="+gsid+"&st=" + st);//de00
为这个post请求设置http头信息:
这些头信息我们可以先在浏览器访问这个连接地址,比如在firefox,然后用httpfox工具抓取这个请求信息,然后按照抓到的信息一个一个的填写。
post.setHeader("User-Agent","Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.77 Safari/537.1");
post.setHeader("host", "weibo.cn");
post.setHeader("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
post.setHeader("Accept-Language","zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3");
post.setHeader("Accept-Encoding", "gzip, deflate");//没有这句,反馈回来的response Content-Length 值为0,所以要加上这句,一点一点的和HttpFox抓取的数据比较,就可以找出问题所在。
post.setHeader("Referer","http://weibo.cn/mblog/sendmblog?vt=4&gsid=" + gsid + "&st=" + st);//13c5
//post.setHeader("Referer","http://m.weibo.cn/");
post.setHeader("Cookie", "gsid_CTandWM=" + gsid);
post.setHeader("Connection","keep-alive");
post.setHeader("Content-Type","multipart/form-data; boundary=---------------------------9994580724461");
多媒体实体:
其中分割线与Header中的参数boundary一致。
MultipartEntity reqEntity = new MultipartEntity(null,"---------------------------9994580724461", null);
给多媒体实体设置相应的参数,包括图片:
String imageurl = "D:\\baiduimage-jiezhi\\" + this.getImageNameCount() + ".jpg";
StringBody con = new StringBody("戒指控 @爱银饰");
reqEntity.addPart("content", con);
if (!imageurl.equals("")) {
FileBody file = new FileBody(new File(imageurl),"image/jpeg");//这里和HttpFox抓到的数据一致,根据网贴设置为file不行,要”image/jpeg“才行。
reqEntity.addPart("pic", file);
}
//这个visible参数也是通过httpfix抓取请求时可以看到的,所以需要加上
reqEntity.addPart("visible", new StringBody("0"));
post.setEntity(reqEntity);
发送请求,获得反馈response:
HttpResponse resp = client.execute(post);
当然我们可以通过HttpResponse对象看我们是否发送成功等等。
在模拟微博登陆并发送微博的过程中遇到很多问题,都是通过一点一点的尝试解决的,特别是发送文字+图片微博,这点还是比较麻烦的,不过后来总算解决,已经改两个月过去了,呵呵,才来写这篇总结,算是记录一下吧,具体还是要看项目中的代码和具体的需求啦!
HttpClient4的使用,模拟浏览器登陆新浪微博,发表微博和文字+图片微博的更多相关文章
- JAVA--利用HttpClient模拟浏览器登陆请求获取响应的Cookie
在通过java采集网页数据时,我们常常会遇到这样的问题: 站点需要登陆才能访问 而这种网站,一般都会对请求进行账号密码的验证,验证的方式也有多种,需要具体分析. 今天分析其中的一种情况: 站点对登陆密 ...
- python 模拟浏览器登陆coursera
import requests import random import string def randomString(length): return ''.join(random.choice(s ...
- Python模拟登陆新浪微博
上篇介绍了新浪微博的登陆过程,这节使用Python编写一个模拟登陆的程序.讲解与程序如下: 1.主函数(WeiboMain.py): import urllib2 import cookielib i ...
- curl模拟自动登陆&采集网页数据
<!DOCTYPE> <html> <head> <meta http-equiv="Content-Type" content=&quo ...
- python urllib2 模拟网站登陆
python urllib2 模拟网站登陆 1. 可用浏览器先登陆,然后查看网页源码,分析登录表单 2. 使用python urllib2,cookielib 模拟网页登录 import urllib ...
- 【好文要转】Python:模拟登录以获取新浪微博OAuth的code参数值
[转自]http://www.tuicool.com/articles/zAz6zi [原文]http://blog.segmentfault.com/hongfei/1190000000343851 ...
- 浏览器与服务器交互原理以及用java模拟浏览器操作v
浏览器应用服务器JavaPHPApache * 1,在HTTP的WEB应用中, 应用客户端和服务器之间的状态是通过Session来维持的, 而Session的本质就是Cookie, * 简单的讲,当浏 ...
- 第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别
第三百四十三节,Python分布式爬虫打造搜索引擎Scrapy精讲—scrapy模拟登陆和知乎倒立文字验证码识别 第一步.首先下载,大神者也的倒立文字验证码识别程序 下载地址:https://gith ...
- requests模拟浏览器请求模块初识
requests模拟浏览器请求模块初识 一.下载 requests模拟浏览器请求模块属于第三方模块 源码下载地址http://docs.python-requests.org/zh_CN/lates ...
随机推荐
- 关于vs2005 __RPC__out __RPC__in 没有定义编译错误
1. 下载WDK http://www.microsoft.com/en-us/download/details.aspx?id=11800 2. 安装WDK 3. vs2005 设置:工具--> ...
- javascript创建类的6种方式
javascript创建类的7种方式 一 使用字面量创建 1.1 示例 var obj={}; 1.2 使用场景 比较适用于临时构建一个对象,且不关注该对象的类型,只用于临时封装一次数据,且不适合代码 ...
- C#数学运算表达式解释器
C#数学运算表达式解释器 測试文件内容: a=2+3*2; b=2*(2+3); 浏览按钮事件处理程序: private void button_browse_Click(object sender, ...
- 怎样将baidu地图中的baidu logo 去掉
今天我的老大问我是不是能够将baidumap 的js版中baidu logo 去掉. 我上网查询一下,有各种方法.比方将相应的logo div remove hide 等等,这些都是须要JS 函数触发 ...
- RSA加密前言
RSA:非对称加密,近期因为工作需要需要实现了一个RSA加密方案.查阅文档无数,主要是通过看他们代码及其引用他人的代码基本实现了跨平台的RSA方案.现在唯一的缺陷是加解密花费的时间太多,下周会把加解密 ...
- 理解并解决GBK转UTF-8奇数中文乱码(转)
最近在做一个反馈功能,把数据反馈到对方公司网站,我公司是GBK编码,对方公司是UTF-8编码.因此,我需要将GBK编码数据转换成UTF-8编码数据,这样对方网站才不会乱码.最简单的方法是将HttpCl ...
- linux 终端控制-- 多彩输出 格式排版
linux 终端控制-- 多彩输出 格式排版 在unix/linux的终端下,怎么控制终端输出的颜色和格式呢,当然了有专门的工具,tput,但是能被terminal直接读懂的格式化字符串更通用. 先来 ...
- 如何使用git
本文不是谈论git具体命令的技术文章. 原文地址:http://blog.csdn.net/ffb/article/details/11206067 我之前发了一条关于git中如何处理中文文件名的微博 ...
- Unity3D游戏开发之开发游戏带来的问题
昨日曾就某投资人把移动团队失败原因之中的一个归于选择Unity引擎进行了一番评论,工具本身无罪,但怎样理解工具.正确使用Unity引擎确实须要讨论,在选择Unity之前你也许须要了解下这个引擎实际开发 ...
- 开源mp3播放器--madplay 编译和移植 简记
madplay是一款开源的mp3播放器. http://madplay.sourcearchive.com/ 下面简单记录一下madplay的编译与移植到ARM开发板上的过程 一.编译x86版本的ma ...