日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > python >内容正文

python

java模拟微博登录_Python模拟微博登陆,亲测有效

發布時間:2024/1/8 python 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java模拟微博登录_Python模拟微博登陆,亲测有效 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

今天想做一個微博爬個人頁面的工具,滿足一些不可告人的秘密。那么首先就要做那件必做之事!模擬登陸……

我對代碼進行了優化,重構成了Python 3.6 版本,并且加入了大量注釋方便大家學習。

PC 登錄新浪微博時, 在客戶端用js預先對用戶名、密碼都進行了加密, 而且在POST之前會GET 一組參數,這也將作為POST_DATA 的一部分。 這樣, 就不能用通常的那種簡單方法來模擬POST 登錄( 比如 人人網 )。

1.

在提交POST請求之前, 需要GET 獲取兩個參數。 地址是:

得到的數據中有 servertime 和 nonce 的值, 是隨機的,其他值貌似沒什么用。

def get_servertime():

url = 'http://login.sina.com.cn/sso/prelogin.php?entry=weibo&callback=sinaSSOController.preloginCallBack&su=dW5kZWZpbmVk&client=ssologin.js(v1.3.18)&_=1329806375939'

# 返回出來的是一個Response對象,無法直接獲取,text后,可以通過正則匹配到

# 大概長這樣子的:sinaSSOController.preloginCallBack({"retcode":0,"servertime":1545606770, ...})

data = requests.request('GET', url).text

p = re.compile('\((.*)\)')

try:

json_data = p.search(data).group(1)

data = json.loads(json_data)

servertime = str(data['servertime'])

nonce = data['nonce']

return servertime, nonce

except:

print('獲取 severtime 失敗!')

return None

2.

通過httpfox 觀察POST 的數據, 參數較復雜,其中 “su" 是加密后的username, sp 是加密后的password。servertime 和 nonce 是上一步得到的。其他參數是不變的。

username 經過了BASE64 計算:

username = base64.encodestring( urllib.quote(username) )[:-1]

password 經過了三次SHA1 加密, 且其中加入了 servertime 和 nonce 的值來干擾。 即: 兩次SHA1加密后, 將結果加上 servertime 和 nonce 的值, 再SHA1 算一次。

def get_pwd(pwd, servertime, nonce):

# 第一次計算,注意Python3 的加密需要encode,使用bytes

pwd1 = hashlib.sha1(pwd.encode()).hexdigest()

# 使用pwd1的結果在計算第二次

pwd2 = hashlib.sha1(pwd1.encode()).hexdigest()

# 使用第二次的結果再加上之前計算好的servertime和nonce值,hash一次

pwd3_ = pwd2 + servertime + nonce

pwd3 = hashlib.sha1(pwd3_.encode()).hexdigest()

return pwd3

def get_user(username):

# 將@符號轉換成url中能夠識別的字符

_username = urllib.request.quote(username)

# Python3中的base64計算也是要字節

# base64出來后,最后有一個換行符,所以用了切片去了最后一個字符

username = base64.encodebytes(_username.encode())[:-1]

return username

3.

將參數組織好, POST請求。 這之后還沒有登錄成功。

POST后得到的內容中包含一句:

location.replace("http://weibo.com/ajaxlogin.php?framelogin=1&callback=parent.sinaSSOController.feedBackUrlCallBack&retcode=101&reason=%B5%C7%C2%BC%C3%FB%BB%F2%C3%DC%C2%EB%B4%ED%CE%F3")

這是登錄失敗時的結果, 登錄成功后結果與之類似, 不過retcode 的值是0 。

接下來再請求這個URL,這樣就成功登錄到微博了。 記得要提前build 緩存。

關注公眾號「Python專欄」,后臺回復「模擬微博登陸」,獲取全套微博自動登陸代碼。

總結

以上是生活随笔為你收集整理的java模拟微博登录_Python模拟微博登陆,亲测有效的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。