几年前的项目专区推特还是很容易的,去年五月份马斯克收购x之后,就需要登录,接口访问也强制称为了http2.0的协议了,最近在返回数据压缩那块也做了处理。
抓紧记录自己的,怕忘记之前怎么搞得了。每次都需要重头整体。
首先分析header中的authorization。
headers = {
'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:109.0) Gecko/20100101 Firefox/114.0',
'Accept': '*/*',
'Accept-Language': 'zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2',
'Accept-Encoding': 'gzip, deflate, br',
'Referer': 'https://twitter.com/search?q=chian&src=typed_query&f=live',
'content-type': 'application/json',
'x-client-uuid': '5b19a1c4-0722-4679-8f1d-0167822d6ba0',
'x-twitter-auth-type': 'OAuth2Session',
'x-csrf-token': '4180cf4e9619752d7e5932a0830cef3fab78acca4a8867dcbc096e095e62a9d73ff3406ac6acb8bc5960c417a96ecc36162340f1ce986724052bf4bd561a534177f6cfcaa5a43831a97577d8df907f0e',
'x-twitter-client-language': 'zh-cn',
'x-twitter-active-user': 'yes',
'DNT': '1',
'Sec-Fetch-Dest': 'empty',
'Sec-Fetch-Mode': 'cors',
'Sec-Fetch-Site': 'same-origin',
'authorization': 'Bearer AAAAAAAAAAAAAAAAAAAAANRILgAAAAAAnNwIzUejRCOuH5E6I8xnZz4puTs%3D1Zv7ttfk8LF81IUq16cHjhLTvJu4FA33AGWWjCpTnA',
'Connection': 'keep-alive',
'Cookie': '登录后cookie',
}
多次请求接口会发现每次登录 x-csrf-token 没啥变化,authorization是变化的。原来还需要x-guest-token 这个字段现在没有了。通过查找authorization关键词能够定位相关参数,追踪能够看到调用逻辑,最终authorization字段就在这个代码中。
https://abs.twimg.com/responsive-web/client-web/main.d2feccda.js
可以通过正则表达式获取相关参数。将其放入头文件中就可以获取到登录后的数据了,python用requests 是无法请求成功,应为Twitter接口启用http2.0,python可以用httpx启动http2。
import ssl
import httpx
ssl_context = httpx.create_ssl_context()
ssl_context.options = ssl.OP_NO_SSLv3 # Enable TLS 1.0 back OP_NO_TLSv1
client = httpx.Client(http2=True,proxies=proxies,verify=ssl_context)#verify=False
req = client.get(url, headers=h, params=params, timeout=3)
最近碰到返回的数据无法格式化成json的情况发现是因为返回的数据是压缩的代码需要修改请求头中的压缩方式。再有就是解析起来太麻烦,json层级异常的多,字段什么意思也不好判断。
如有问题 可以联系
微信号:liu_yue_yang