200字范文,内容丰富有趣,生活中的好帮手!
200字范文 > java微博模拟登陆_java 模拟登录新浪微博(通过cookie)

java微博模拟登陆_java 模拟登录新浪微博(通过cookie)

时间:2019-08-24 22:41:23

相关推荐

java微博模拟登陆_java 模拟登录新浪微博(通过cookie)

这几天一直在研究新浪微博的爬虫,发现爬取微博的数据首先要登录。本来打算是通过账号和密码模拟浏览器登录。但是现在微博的登录机制比较复杂。通过账号密码还没有登录成功QAQ。所以就先记录下,通过cookie直接访问自己的微博主页。

微博登录的认证过程

微博登录的细节在其他的博客里已经有了详细的介绍。大概就是用户输入账号和密码后与服务器产生几次会话。若认证成功后,微博的服务器会返回给浏览器一个cookie。在之后访问微博的其他内容时,通过发送这个cookie就能正常访问微博了。所以用过cookie访问微博,过程就简化为了获取cookie,然后通过程序模拟浏览器访问微博首页。

获取微博的cookie

通过抓包软件或浏览器自带的调试工具都可以抓取网页的cookie。本文使用的是火狐浏览器的HttpFox 插件来获取微博的cookie。

1,打开微博首页,打开HttpFox

2,输入用户名和密码,勾选“记住我”,点击登录。点击登录后我们可以看到HttpFox下产生了很多的URL。进入主页后在HTTPFox中找到你主页对应的URL,如下图:

点击主页的URL后,我们可以看见左下方的一些信息。包括“Headers”,“Cookies”等。

3,在“Headers”中可以看到有一条“Cookie”的信息。这个就是我们所需要的cookie了。点击右键保存cookie。

至此,就获取了我们登录时所要的cookie了!

代码实现

由于我们是直接通过cookie进行的登录。所以少了很多认证的过程。直接使用HttpClient的相关包,带上之前获取的cookie就可以访问个人首页。获取了首页,我们就可以通过正则表达式来分析微博数据了。

import java.io.IOException;

import .URI;

import .URISyntaxException;

import org.apache.http.HttpEntity;

import org.apache.http.HttpResponse;

import org.apache.http.client.ClientProtocolException;

import org.apache.http.client.HttpClient;

import org.apache.http.client.methods.HttpGet;

import org.apache.http.client.methods.HttpPost;

import org.apache.http.config.Registry;

import org.apache.http.config.RegistryBuilder;

import org.apache.http.cookie.CookieSpec;

import org.apache.http.cookie.CookieSpecProvider;

import org.apache.http.impl.client.BasicCookieStore;

import org.apache.http.impl.client.HttpClients;

import org.apache.http.impl.cookie.DefaultCookieSpec;

import org.apache.http.message.BasicHeader;

import org.apache.http.protocol.HttpContext;

import org.apache.http.util.EntityUtils;

/**

*

*

*@author zkw

*

*/

public class cookieLogin {

private HttpClient client;

private HttpPost post;

private HttpGet get;

private BasicCookieStore cookieStore;

public cookieLogin() {

//cookie策略,不设置会拒绝cookie rejected,设置策略保存cookie信息

cookieStore = new BasicCookieStore();

CookieSpecProvider myCookie = new CookieSpecProvider() {

public CookieSpec create(HttpContext context) {

return new DefaultCookieSpec();

}

};

Registry rg = RegistryBuilder. create().register("myCookie", myCookie)

.build();

client = HttpClients.custom().setDefaultCookieStore(cookieStore).setDefaultCookieSpecRegistry(rg).build();

get = new HttpGet();

post = new HttpPost();

}

public void Login() throws ClientProtocolException, IOException, URISyntaxException {

String LoginUrl = "你的微博主页网址";

get.setURI(new URI(LoginUrl));

get.addHeader("Host", "");

get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/0101 Firefox/45.0");

get.addHeader("Accept", "*/*");

get.addHeader("Accept-Language", "zh-CN,zh;q=0.8,en-US;q=0.5,en;q=0.3");

get.addHeader("Accept-Encoding", "gzip, deflate");

get.addHeader("Referer", "/");

get.addHeader(new BasicHeader("Cookie", "上述获取的cookie值"));

HttpResponse resp = client.execute(get);

HttpEntity entity = resp.getEntity();

String cont = EntityUtils.toString(entity);

System.out.println("获取的微博内容:" + cont);

}

public HttpClient getClient() {

return client;

}

public void setClient(HttpClient client) {

this.client = client;

}

public HttpPost getPost() {

return post;

}

public void setPost(HttpPost post) {

this.post = post;

}

public HttpGet getGet() {

return get;

}

public void setGet(HttpGet get) {

this.get = get;

}

public BasicCookieStore getCookieStore() {

return cookieStore;

}

public void setCookieStore(BasicCookieStore cookieStore) {

this.cookieStore = cookieStore;

}

public static void main(String[] args) throws ClientProtocolException, IOException, URISyntaxException {

new cookieLogin().Login();

}

}

总结

通过cookie登录微博是一种快捷方式,但是存在不少问题。所以博主还在研究微博账号认证过程,希望过几天能有所突破QAQ。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。