java微博模擬登陸_java 模擬登錄新浪微博(通過cookie)

這幾天一直在研究新浪微博的爬蟲,發現爬取微博的數據首先要登錄。本來打算是通過賬號和密碼模擬瀏覽器登錄。但是現在微博的登錄機制比較復雜。通過賬號密碼還沒有登錄成功QAQ。所以就先記錄下,通過cookie直接訪問自己的微博主頁。

微博登錄的認證過程

微博登錄的細節在其他的博客里已經有了詳細的介紹。大概就是用戶輸入賬號和密碼后與服務器產生幾次會話。若認證成功后,微博的服務器會返回給瀏覽器一個cookie。在之后訪問微博的其他內容時,通過發送這個cookie就能正常訪問微博了。所以用過cookie訪問微博,過程就簡化為了獲取cookie,然后通過程序模擬瀏覽器訪問微博首頁。

獲取微博的cookie

通過抓包軟件或瀏覽器自帶的調試工具都可以抓取網頁的cookie。本文使用的是火狐瀏覽器的HttpFox 插件來獲取微博的cookie。

1,打開微博首頁,打開HttpFox

337b0f56064aa7f6ca02fda28821f423.png

2,輸入用戶名和密碼,勾選“記住我”,點擊登錄。點擊登錄后我們可以看到HttpFox下產生了很多的URL。進入主頁后在HTTPFox中找到你主頁對應的URL,如下圖:

a6cf4f5fd23fd90430e64cba7c308f89.png

點擊主頁的URL后,我們可以看見左下方的一些信息。包括“Headers”,“Cookies”等。

3,在“Headers”中可以看到有一條“Cookie”的信息。這個就是我們所需要的cookie了。點擊右鍵保存cookie。

至此,就獲取了我們登錄時所要的cookie了!

代碼實現

由于我們是直接通過cookie進行的登錄。所以少了很多認證的過程。直接使用HttpClient的相關包,帶上之前獲取的cookie就可以訪問個人首頁。獲取了首頁,我們就可以通過正則表達式來分析微博數據了。

import java.io.IOException;

import java.net.URI;

import java.net.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", "weibo.com");

get.addHeader("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 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", "http://weibo.com/");

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。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/260336.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/260336.shtml
英文地址,請注明出處:http://en.pswp.cn/news/260336.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

硬盤結構,主引導記錄MBR,硬盤分區表DPT,主分區、擴展分區和邏輯分區,電腦啟動過程...

filex的文件系統看的云里霧里,還是先總結下FAT的一些基本知識吧。硬盤結構硬盤有很多盤片組成,每個盤片的每個面都有一個讀寫磁頭。如果有N個盤片。就有2N個面,對應2N個磁頭(Heads),從0、1、2開始編號。每個盤片的半徑均為固定值R…

最全面 Nginx 入門教程 + 常用配置解析

轉自 http://blog.csdn.net/shootyou/article/details/6093562 Nginx介紹和安裝 一個簡單的配置文件 模塊介紹 常用場景配置 進階內容 參考資料 Nginx介紹和安裝 Nginx是一個自由、開源、高性能及輕量級的HTTP服務器及反轉代理服務器, 其性能與IMAP/POP3代理服務器…

linux 客戶機中不支持 unity_婚姻中的不理解,來源于夫妻雙方情感支持的不同

很多女性在婚姻中往往覺得無法得到丈夫的理解,當遇到一些生活或者工作上的問題的時候,她們想要在情感上得到丈夫的支持和理解。但是很多丈夫對此可能并不了解和理解,更傾向于用理性幫助妻子解決問題。而女性所需要的幫助可能并不是解決問題的…

Linux中使用crontab命令啟用自定義定時任務

一 簡介Linux下的任務調度分為兩類,系統任務調度和用戶任務調度系統任務調度:系統需要定期執行的任務,比如重啟、日志清理等,其配置文件是:/etc/crontab用戶任務調度:某個用戶需要定期執行的任務。用戶可以…

java 循環標記_深入淺析Java 循環中標簽的作用

continue和break可以改變循環的執行流程,但在多重循環中,這兩條語句無法直接從內層循環跳轉到外層循環。在C語言中,可以通過goto語句實現多重循環的跳轉,但在非循環結構中使用goto語句會使程序的結構紊亂,可讀性變差。…

JS,Jquery 調用 C#WebService

1&#xff0c;需要在服務下面把代碼的注釋去掉 // 若要允許使用 ASP.NET AJAX 從腳本中調用此 Web 服務&#xff0c;請取消對下行的注釋。   //[System.Web.Script.Services.ScriptService] 2,JS 調用方法如下 var request <?xml version"1.0" encoding"…

iOS tabview 適配問題

ios7的UITableView實現ios6的圓角效果 iOS7 UITableView做成類似iOS6風格 在iOS7的時候我們會發現cell的默認線條會向右偏移&#xff0c;使左邊空出了一些位置&#xff0c;這時候我們可以調用如下的方法來解決。這樣我們的cell就會和iOS6前的一樣鋪滿整個寬度了。 if ([tableVi…

PHP學習總結(14)——PHP入門篇之常用運算符

一、什么是運算符什么是運算符&#xff1f;運算符是告訴PHP做相關運算的標識符號。例如&#xff0c;你需要計算123乘以456等于多少&#xff0c;這時候就需要一個符號&#xff0c;告訴服務器&#xff0c;你需要做乘法運算。PHP中的運算符有哪些&#xff1f;PHP運算符一般分為算術…

百度時間顯示_文章的發布時間對百度優化網站重要嗎

文章的發布時間對百度優化網站重要嗎&#xff1f;這個問題&#xff0c;相信很多初做網站優化的萌新朋友都會問到&#xff0c;以小匠個人的經歷來分享這個問題的經驗&#xff0c;小匠認為&#xff0c;文章的發布時間對優化網站是非常重要的&#xff0c;下面小匠將從實際經歷來給…

循環鏈表解決約瑟夫環問題

約瑟夫環問題可以簡單的使用數組的方式實現&#xff0c;但是現在我使用循環鏈表的方法來實現&#xff0c;因為上午看到一道面試題規定使用循環鏈表解決約瑟夫環問題。 什么是約瑟夫環&#xff1f; “約瑟夫環是一個數學的應用問題&#xff1a;已知n個人&#xff08;以編號1&…

java 什么時候進行垃圾回收_java什么時候進行垃圾回收,垃圾回收的執行流程

java的垃圾回收分為三個區域新生代 老年代 永久代一個對象實例化時 先去看伊甸園有沒有足夠的空間如果有 不進行垃圾回收 ,對象直接在伊甸園存儲.如果伊甸園內存已滿,會進行一次minor gc然后再進行判斷伊甸園中的內存是否足夠如果不足 則去看存活區的內存是否足夠.如果內存足夠…

常用的webservice接口

商業和貿易&#xff1a; 1、股票行情數據 WEB 服務&#xff08;支持香港、深圳、上海基金、債券和股票&#xff1b;支持多股票同時查詢&#xff09; Endpoint: http://webservice.webxml.com.cn/WebServices/StockInfoWS.asmx Disco: http://webservice.webxml.com.cn/WebServ…

基于HTML5 Canvas 實現矢量工控風機葉輪旋轉

之前在拓撲上的應用都是些靜態的圖元&#xff0c;今天我們將在拓撲上設計一個會動的圖元——葉輪旋轉。 先看看最后我們實現的效果&#xff1a;http://www.hightopo.com/demo/fan/index.html 我們先來看下這個葉輪模型長什么樣 從模型上看&#xff0c;這個葉輪模型有三個葉片&a…

java 并發模型總類_java并發編程系列-內存模型基礎

java線程之間的通信對程序開發人員是完全透明的&#xff0c;內存的可見性問題很容易困擾很多開發人員。本篇博文將揭開java內存模型的神秘面紗&#xff0c;來看看內存模型到底是怎樣的。并發編程模型的分類并發編程中需要處理的兩個關鍵問題&#xff1a;線程之間如何通信線程之…

python調用java的jar包_python調用java的jar包報錯127

該樓層疑似違規已被系統折疊 隱藏此樓查看此樓最近在弄python需要調用到Java的jar包&#xff0c;按照網上的教程走&#xff0c;最后總是報錯No matching overloads found for [init in find. at native\common\jp_method.cpp:127Java&#xff1a;package aes;import com.sun.cr…

iphone、Android接收System.Net.Mail發的郵件標題亂碼

參考地址&#xff1a;http://blog.csdn.net/whowhen21/article/details/5959225 在做項目時候&#xff0c;用到.Net的System.Net.Mail發送郵件&#xff0c;經測試&#xff0c;發現如果標題過長&#xff0c;收到的就會是亂碼了(那種Base64格式的數據)&#xff0c;幾經測試&#…

數據倉庫與數據挖掘的一些基本概念

下面內容摘自互聯網并作了整理。 名詞&#xff1a; BI(Business Intelligence)&#xff1a;商業智能&#xff0c; DW(Data Warehouse)&#xff1a;數據倉庫&#xff0c;詳見正文Q1部分。 OLTP(On-Line Transaction Processing)&#xff1a;聯機事務處理 也稱為面向交易的處理系…

ATS讀小文件(內存命中)

一個資源根據其大小可能會存在多個存儲對象中。如果足夠小&#xff08;連同doc結構的大小小于一個fragment的size&#xff09;&#xff0c;連同這個資源的meta信息一起存儲在一個doc中。如果比較大&#xff0c;第一個存儲對象保存資源的meta信息&#xff0c;后面跟著若干個frag…

python 加密解密_python加密解密

EncodeFile(python2.7加密)# -*- coding: utf8 -*-import base64import sysreload(sys)sys.setdefaultencoding(utf8)inFilesys.argv[1]try:fin open(inFile, "rb")fout open(inFile".txt", "w")base64.encode(fin, fout)passexcept Exception…

java double 兩位_java double 保留兩位小數

java保留兩位小數問題&#xff1a;方式一&#xff1a;四舍五入double f 111231.5585;BigDecimal b new BigDecimal(f);double f1 b.setScale(2, BigDecimal.ROUND_HALF_UP).doubleValue();保留兩位小數---------------------------------------------…