成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

PHP基于laravel框架獲取微博數(shù)據(jù)之一 模擬新浪微博登錄

galois / 1599人閱讀

摘要:模擬登錄新浪微博的核心,也是與模擬登錄最大的不同,密碼加密。已經(jīng)實(shí)現(xiàn)模擬新浪微博登錄的功能,之后不再更新。

參考資料:
http://www.csuldw.com/2016/11/10/2016-11-10-simulate-sina-login/
http://blog.csdn.net/fly_leopard/article/details/51148904
http://www.tuicool.com/articles/uIJzYff
http://blog.csdn.net/u010029983/article/details/46364113
等

模擬新浪微博登錄是抓取新浪數(shù)據(jù)的基礎(chǔ),網(wǎng)上的參考資料大多介紹的是用Python開發(fā),有一篇使用php模擬登錄的資料還是在phpcms中實(shí)現(xiàn)的,也沒有太深入分析。

PS:網(wǎng)上資料來源比較亂,不知道phpcms實(shí)現(xiàn)模擬微博登錄的原作是不是csdn的t0mCl0nes,本篇介紹php模擬登錄的核心借鑒的就是這篇文章。以下提及這篇文章以phpcms方案指代。

使用PHP模擬登錄新浪微博和Python還是有些區(qū)別的,其中也存在一些問題,在這里我就簡單分析一下PHP模擬新浪微博登錄的過程和存在的問題。

項(xiàng)目地址:
https://github.com/daweilang/...

標(biāo)題名“基于laravel框架”,因?yàn)檎麄€(gè)獲取新浪微博數(shù)據(jù)的系統(tǒng)是用的lavarel框架搭建的,使用了lavarel隊(duì)列、命令等等工具。其實(shí)模擬新浪微博登錄這部分完全可以用簡單php程序頁面實(shí)現(xiàn),希望我下面的分析能夠幫助感興趣的朋友實(shí)現(xiàn)自己的模擬登錄程序。
PS:AppHttpControllersAdminAuthorizeController控制器是本文的主程序,以下提及的代碼都在github該程序中。

這里所介紹的模擬新浪微博登錄,具體是指通過新浪通行證模擬登錄。新浪通行證是新浪的統(tǒng)一登錄模式,新浪網(wǎng)(sina.com.cn)和微博(weibo.com)是兩個(gè)不同的頂級域,正是通過新浪通行證,微博實(shí)現(xiàn)了跨域登錄。對于跨域登錄了解不多,不過新浪網(wǎng)使用的這種方式技術(shù)上應(yīng)該是很深入的。

具體登錄參數(shù)的抓包分析請參考上面和網(wǎng)上的一些文章,其中固定參數(shù)可以參考我的代碼“config/weibo.php”的curl數(shù)組。

這里主要對 預(yù)登錄和預(yù)登錄返回的參數(shù) 結(jié)合PHP程序進(jìn)一步說明。

當(dāng)用戶輸入用戶名并且焦點(diǎn)離開輸入框后,登錄頁面會向 http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=%s&rsakt=mod&checkpin=1&client=ssologin.js(v1.4.18)&_=%s 發(fā)送一次GET請求,其中用戶名是經(jīng)過base64_encode加密的,最后是個(gè)毫秒級的時(shí)間戳,其他參數(shù)可以固定。

該請求返回了一些參數(shù),網(wǎng)上資料已經(jīng)介紹了后面主要用到了 "servertime"、”nonce"和"rsakv" 這三個(gè)參數(shù),不過其實(shí) “showpin”和“pcid” 這兩個(gè)參數(shù)也很重要,showpin為1的時(shí)候代表需要填寫驗(yàn)證碼,而驗(yàn)證碼的生成需要“pcid”這個(gè)參數(shù)。

phpcms方案中將請求返回的這些參數(shù)儲存到cookie中,我的代碼是儲存到文件中,參數(shù)的取得和儲存代碼參見GetWeiboCookie類的getPreUrl()方法。

PHP模擬登錄新浪微博的核心,也是與Python模擬登錄最大的不同,密碼加密。

網(wǎng)上的文章都已經(jīng)介紹了微博密碼加密原理,使用RSA2算法,“首先創(chuàng)建一個(gè) rsa 公鑰,公鑰的兩個(gè)參數(shù)都是固定值,第一個(gè)參數(shù)是登錄過程中 prelogin.php 中的 pubkey ,第二個(gè)參數(shù)是加密的 js 文件中指定的”10001”(這兩個(gè)值需要先從16進(jìn)制轉(zhuǎn)換成10進(jìn)制,把“10001”轉(zhuǎn)成十進(jìn)制為“65537”)。最后再加入 servertime 和 nonce 進(jìn)行進(jìn)一步加密。”

新浪通行證的流程是,在用戶填寫完用戶名和密碼提交后,請求“https://login.sina.com.cn/js/sso/ssologin.js” 頁面,這個(gè)js頁面里就是上面的加密算法,使用js將密碼加密。

這個(gè)流程使用Python模擬的代碼是這樣的:

  RSAKey = rsa.PublicKey(rsaPubkey, 65537) #創(chuàng)建公鑰
  #根據(jù)js拼接方式構(gòu)造明文
  codeStr = str(servertime) + "	" + str(nonce) + "
" + str(password) 
  pwd = rsa.encrypt(codeStr, RSAKey)  #使用rsa進(jìn)行加密

短短三行代碼,只需要安裝rsa包。。。

百度了好久,沒有找到php實(shí)現(xiàn)生成rsa公鑰方法。

phpcms方案實(shí)現(xiàn)了一種解決方法,也就是按照新浪通行證的流程來實(shí)現(xiàn),用ssologin的js方法來加密。phpcms方案對sso加密算法進(jìn)行了一次封裝,csdn博客上有該段js代碼。我的js水平不高,完全借鑒了這段代碼,在此基礎(chǔ)上將加密算法提取到一個(gè)js文件中。



這種做法有個(gè)很大的缺點(diǎn),需要一個(gè)多帶帶的頁面來生成加密后的密碼,并且將密碼傳給最后的提交頁面,也就是說頁面需要多次跳轉(zhuǎn)。

   var encrpt = getpass("{$preParam["sp"]}", "{$preParam["servertime"]}", "{$preParam["nonce"]}", "{$preParam["pubkey"]}" );
//     document.write(encrpt);
   window.location.href="/admin/authorize/browserLogin/?sp="+encrpt;

最后將加密的密碼傳遞給最后的提交頁,見getRsaPwd()方法。

我是在最終提交頁browserLogin中將之前儲存在文件中的各種參數(shù)提取與加密后的密碼組合,最后post給新浪通行證登錄頁登錄。

這里還有一點(diǎn)是之前介紹過的,需要填寫驗(yàn)證碼情況,如果預(yù)登錄返回的showpin參數(shù)為1,需要獲得驗(yàn)證碼圖片,填寫驗(yàn)證碼登錄。驗(yàn)證碼圖片地址是

http://login.sina.com.cn/cgi/pin.php?r={$randInt}&s=0&p={$preParam["pcid"]}

r是隨機(jī)8位數(shù)字,p是預(yù)登陸返回的pcid。如果有驗(yàn)證碼就多了一次手動填寫驗(yàn)證碼的流程。

具體代碼參考browserLogin()方法。

這種方法與Python相比最大的缺點(diǎn)是不能自動登錄,也就是后臺登錄,Python不需要人為觸發(fā),有用戶名和密碼后完全可以使用程序模擬登錄,而php實(shí)現(xiàn)需要人為觸發(fā)登錄。

另外,如果需要填寫驗(yàn)證碼,Python也有工具可以識別驗(yàn)證碼,做到自動打碼,全程自動登錄,這點(diǎn)php實(shí)現(xiàn)起來也比較困難。

之后的curl登錄沒有什么需要特別說明的,應(yīng)該是在參數(shù)里面設(shè)置了入口weibo,所以返回的cookie可以直接使用到微博中,理論上這種方式可以在新浪全站模擬登錄,不過我并沒有試過其他子站。新浪只是在密碼核驗(yàn)上比較嚴(yán)格,對于模擬登錄的限制并不多。

綜上,雖然使用PHP實(shí)現(xiàn)了模擬新浪微博登錄,但比之Python還是很不方便的,畢竟Python做爬蟲的有很多工具。不過在模擬登錄微博的基礎(chǔ)上獲取微博數(shù)據(jù)過程中,使用lavarel這種框架實(shí)現(xiàn)了很多腳本功能,大大提高了抓取數(shù)據(jù)效率,這也是我使用lavarel開發(fā)這個(gè)小項(xiàng)目的原因。

https://github.com/daweilang/...
已經(jīng)實(shí)現(xiàn)模擬新浪微博登錄的功能,之后不再更新。

后續(xù)的新浪微博數(shù)據(jù)抓取分析,請關(guān)注 https://github.com/daweilang/...
這個(gè)項(xiàng)目還在調(diào)整階段,還有很多缺陷需要完善,待功能成熟后,我也會圍繞項(xiàng)目的設(shè)計(jì)目標(biāo),介紹一下實(shí)現(xiàn)方案。

文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/22624.html

相關(guān)文章

  • Growth Hacker 奇技淫巧一則:零授權(quán),抓取新浪微博任何用戶的微博內(nèi)容

    摘要:由于我需要獲取普通用戶的微博內(nèi)容,因此還要想辦法繼續(xù)繞。默認(rèn)是勾上的,也即是說微博團(tuán)隊(duì)主觀上是希望用戶勾上這個(gè),從而借助判斷來提高登錄安全性的。我遂果斷取消勾選該選項(xiàng),輸入任何一個(gè)自己的微博賬號密碼,點(diǎn)擊登錄。 有時(shí)或基于以下凡此種種需求,我們會想要去抓取新浪微博的內(nèi)容: 產(chǎn)品冷啟動,導(dǎo)入外部數(shù)據(jù),而非從頭積累; 通過大數(shù)據(jù)+語義分析獲取用戶興趣行為偏好,提供智能推薦; 監(jiān)控微博輿...

    DevWiki 評論0 收藏0
  • selenium 自動化爬蟲 5分鐘爬取新浪李敖大師1751條微博.

    摘要:是一個(gè)瀏覽器自動化測試框架可以模擬用戶的所有操作很久以前就想把李敖大師的所有微博爬取下來一直沒空前天看見群里有人推薦和就學(xué)了做了個(gè)你們想爬別人的只要把李敖大師的地址換成你要的就行了我還沒學(xué)不過我猜他就是去掉功能的瀏覽器這樣可以讓爬蟲更快如果 selenium 是一個(gè)瀏覽器自動化測試框架.可以模擬用戶的所有操作. 很久以前就想把李敖大師的所有微博爬取下來.一直沒空,前天看見群里有人推薦s...

    zhichangterry 評論0 收藏0
  • 借助詩詞API和微博圖床搭建自動發(fā)圖文微博機(jī)器人

    摘要:微博圖床對于微博圖床的理解得力于這篇文章利用微博當(dāng)圖床語言實(shí)現(xiàn)。源碼如下上傳圖片到微博圖床圖片文件圖片是否采用方式上傳返回的數(shù)據(jù)微博提交正則表達(dá)式提取返回結(jié)果中的數(shù)據(jù)微博機(jī)器人源碼列舉了所要用到的幾個(gè)重要,最后還是貼一下機(jī)器人的源碼吧。 ? 在2011年的時(shí)候,浙大的一位博士生借助微博的開放平臺為他實(shí)驗(yàn)室的一臺飲水機(jī)弄了個(gè)微博,名喚@浙大CCNT實(shí)驗(yàn)室飲水機(jī),俗稱飲水機(jī)娘。當(dāng)年這...

    沈建明 評論0 收藏0
  • 23個(gè)Python爬蟲開源項(xiàng)目代碼,包含微信、淘寶、豆瓣、知乎、微博

    摘要:今天為大家整理了個(gè)爬蟲項(xiàng)目。地址新浪微博爬蟲主要爬取新浪微博用戶的個(gè)人信息微博信息粉絲和關(guān)注。代碼獲取新浪微博進(jìn)行登錄,可通過多賬號登錄來防止新浪的反扒。涵蓋鏈家爬蟲一文的全部代碼,包括鏈家模擬登錄代碼。支持微博知乎豆瓣。 showImg(https://segmentfault.com/img/remote/1460000018452185?w=1000&h=667); 今天為大家整...

    jlanglang 評論0 收藏0

發(fā)表評論

0條評論

galois

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<