Python使用Socket(Https)Post登錄百度的實(shí)現(xiàn)代碼
登錄百度,首先當(dāng)然是先抓百度的登錄包 ,由于是網(wǎng)頁(yè)登錄,最方便的自然是httpwatch了,我使用的測(cè)試賬號(hào)是itiandatest1,密碼是itianda,抓包結(jié)果:
POST /?login HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://passport.baidu.com/?login&tpl=mn
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa Toolbar; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Accept-Encoding: gzip, deflate
Host: passport.baidu.com
Content-Length: 243
Connection: Keep-Alive
Cache-Control: no-cache
登錄包抓到了,下面開(kāi)始寫(xiě)代碼:
import socket
import ssl
sock = ssl.wrap_socket(socket.socket())
ssl是專門(mén)用來(lái)處理https的模塊,我們使用該模塊的wrap_socket函數(shù)生成一個(gè)SSLSocket對(duì)象。
然后建立連接:
sock.connect(('passport.baidu.com', 443))
這里需要注意的是https使用443端口,不是80。
之后發(fā)送數(shù)據(jù):
data = '''\
POST /?login HTTP/1.1
Accept: image/jpeg, application/x-ms-application, image/gif, application/xaml+xml, image/pjpeg, application/x-ms-xbap, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: https://passport.baidu.com/?login&tpl=mn
Accept-Language: zh-CN
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.1; Trident/5.0; SLCC2; .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; Media Center PC 6.0; .NET4.0C; .NET4.0E; Alexa Toolbar; BOIE9;ZHCN)
Content-Type: application/x-www-form-urlencoded
Host: passport.baidu.com
Content-Length: 243
Connection: Keep-Alive
Cache-Control: no-cache
tpl_ok=&next_target=&tpl=mn&skip_ok=&aid=&need_pay=&need_coin=&pay_method=&u=http%3A%2F%2Fwww.baidu.com%2F&return_method=get&more_param=&return_type=&psp_tt=0&password=itianda&safeflg=0&isphone=tpl&username=itiandatest1&verifycode=&mem_pass=on\
'''
sock.sendall(data)
需要注意的是sendall之后不能調(diào)用shutdown方法。
其余部分就和普通的socket處理方式?jīng)]什么差別了 :
recv_data = sock.recv(8192)
sock.close()
print recv_data
由于我們只需要cookie信息,所以只接收少量數(shù)據(jù)就可以了。
登錄成功的標(biāo)志是服務(wù)器返回含有BDUSS的set-cookie:
HTTP/1.1 200 OK
Set-Cookie: BAIDUID=DB464E1EBA6571FB82D70460D6AAB666:FG=1; max-age=946080000; expires=Wed, 11-Dec-41 17:18:17 GMT; domain=.baidu.com; path=/; version=1
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Date: Mon, 19 Dec 2011 17:18:17 GMT
Server: Apache
P3P: CP=" OTI DSP COR IVA OUR IND COM "
P3P: CP=" OTI DSP COR IVA OUR IND COM "
P3P: CP=" OTI DSP COR IVA OUR IND COM "
Set-Cookie: BAIDUID=26FD0CB5389BF4699C447982D8080239:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=946080000; path=/; domain=.baidu.com; version=1
Set-Cookie: BAIDUID=26FD0CB5389BF4698191E4134CACEA29:FG=1; expires=Wed, 11-Dec-41 17:18:17 GMT; max-age=946080000; path=/; domain=.baidu.com; version=1
Set-Cookie: BDUSS=dTajkzWTFWR3hXT3Jsc09LdkNsZ011YlZka340VWtqNkZzbW0tUTdOUFp-aFpQQVFBQUFBJCQAAAAAAAAAAAouTSCLkioVaXRpYW5kYXRlc3QxAAAAAAAAAAAAAAAAAAAAAAAAAADgmoV5AAAAAOCahXkAAAAAuWZCAAAAAAAxMC42NS40NNlx707Zce9OWT; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com
Set-Cookie: PTOKEN=16ba4a120f070f3cc759a817981c2516; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=passport.baidu.com; HttpOnly
Set-Cookie: STOKEN=fda94395cd4ae4661cefd3a4017a8454; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=passport.baidu.com
Set-Cookie: USERID=626167789a799e630e60fb27466fa80e; expires=Tue, 01 Jan 2030 00:00:00 GMT; path=/; domain=.baidu.com
Content-Type: text/html;charset=gbk
Cache-Control: no-cache
Pragma: no-cache
Content-Encoding: none
Content-Length: 850
Connection: close
OK,登陸成功。
本文來(lái)自: itianda's blog
- Python 網(wǎng)絡(luò)編程起步(Socket發(fā)送消息)
- python socket網(wǎng)絡(luò)編程步驟詳解(socket套接字使用)
- python實(shí)現(xiàn)socket端口重定向示例
- python socket 超時(shí)設(shè)置 errno 10054
- Python通過(guò)websocket與js客戶端通信示例分析
- python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(三):socket網(wǎng)絡(luò)服務(wù)器
- python網(wǎng)絡(luò)編程學(xué)習(xí)筆記(二):socket建立網(wǎng)絡(luò)客戶端
- python網(wǎng)絡(luò)編程之TCP通信實(shí)例和socketserver框架使用例子
- 為python設(shè)置socket代理的方法
- Pythony運(yùn)維入門(mén)之Socket網(wǎng)絡(luò)編程詳解
相關(guān)文章
python按照l(shuí)ist中字典的某key去重的示例代碼
這篇文章主要介紹了python按照l(shuí)ist中字典的某key去重的示例代碼,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10
基于SQLAlchemy實(shí)現(xiàn)操作MySQL并執(zhí)行原生sql語(yǔ)句
這篇文章主要介紹了基于SQLAlchemy實(shí)現(xiàn)操作MySQL并執(zhí)行原生sql語(yǔ)句,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-06-06
python遞歸函數(shù)求n的階乘,優(yōu)缺點(diǎn)及遞歸次數(shù)設(shè)置方式
這篇文章主要介紹了python遞歸函數(shù)求n的階乘,優(yōu)缺點(diǎn)及遞歸次數(shù)設(shè)置方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-04-04
keras小技巧——獲取某一個(gè)網(wǎng)絡(luò)層的輸出方式
這篇文章主要介紹了keras小技巧——獲取某一個(gè)網(wǎng)絡(luò)層的輸出方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-05-05
Python循環(huán)語(yǔ)句之while循環(huán)和for循環(huán)詳解
在Python中,循環(huán)語(yǔ)句用于重復(fù)執(zhí)行一段代碼,直到滿足某個(gè)條件為止,在Python中,有兩種主要的循環(huán)語(yǔ)句:for循環(huán)和while循環(huán),本文就來(lái)給大家介紹一下這兩個(gè)循環(huán)的用法,需要的朋友可以參考下2023-08-08
python統(tǒng)計(jì)一個(gè)文本中重復(fù)行數(shù)的方法
這篇文章主要介紹了python統(tǒng)計(jì)一個(gè)文本中重復(fù)行數(shù)的方法,涉及針對(duì)Python中dict對(duì)象的使用及相關(guān)本文的操作,具有一定的借鑒價(jià)值,需要的朋友可以參考下2014-11-11
基于Opencv制作的美顏相機(jī)帶你領(lǐng)略美顏特效的效果
最關(guān)于美顏類相機(jī)最重要的是第一步:人臉檢測(cè),本篇文章中是采用openCV開(kāi)源庫(kù)實(shí)現(xiàn),文中給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值2021-09-09
Pandas提高數(shù)據(jù)分析效率的13個(gè)技巧匯總
這篇文章主要是為大家歸納整理了13個(gè)工作中常用到的pandas使用技巧,方便更高效地實(shí)現(xiàn)數(shù)據(jù)分析,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2022-05-05

