逆向时需要模拟请求的发送,所以需要掌握发送请求的模块。
Python-requests模块
在python中使用requests模块进行请求的发送。
requests模块get/post请求
首先安装requests模块:pip install requests
接着使用requests模块进行最基础的get和post请求,代码如下:
import json
import requests
url = 'https://www.baidu.com/'
headers = {
"Cookie": "xxxx",
"Host": "www.baidu.com",
"Pragma": "no-cache",
"Referer": "https://cn.bing.com/",
"Sec-Fetch-Dest": "document",
"Sec-Fetch-Mode": "navigate",
"Sec-Fetch-Site": "cross-site",
"Sec-Fetch-User": "?1",
"Upgrade-Insecure-Requests": "1",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203",
"sec-ch-ua": "\"Not/A)Brand\";v=\"99\", \"Microsoft Edge\";v=\"115\", \"Chromium\";v=\"115\"",
"sec-ch-ua-mobile": "?0",
"sec-ch-ua-platform": "\"Windows\""
}
# get请求
result = requests.get(url=url, headers=headers)
print(result.text)
# post
data = {
}
# 表单body form-data
result = requests.post(url=url, data=data, headers=headers)
- 第5行是请求的url,在逆向时有些url本身会携带一些校验参数,用以给后台校验使用
- 第16行,在请求头中添加user-agent,有些网站可能会校验user-agent
- 一般从浏览器调试工具中复制的请求头需要转换成python中的字典可以使用pycharm中的工具快速转换:
(选中转换内容,右键使用插件即可)
第31行发送post请求,post请求有很多类型,有些是需要提交的内容要求为form-data格式,那么此时data需要是json类型,如果是其他类型可能需要传递json字符串(使用
json.dumps(data)
即可转换)requests使用代理
在使用requests模块对某个网站发起请求时,如果频率过快可能会被限流拦截,因此可以将requests接入代理池。
代理池一般会提供一个地址,这里以127.0.0.1:9999为例,代码如下:
# 代理
# cookie获取
# 重定向
import requests
def set_proxy():
"""
设置代理
:return:
"""
url = 'https://www.justinwuwei.com'
headers = {
'user-agent':'****'
}
# 主机地址和端口号
proxy = '127.0.0.1:9999'
proxies = {
'http':'http://'+proxy,
'https':'http://'+proxy
}
res = requests.get(url=url,headers=headers,proxies=proxies)
print(res.text)
if __name__ == '__main__':
set_proxy()
- 第18行新建了一个字典用来作为代理池的参数
- 第22行在get方法中的proxies参数将代理池配置传递进去,就能让requests接入代理了
requests获取cookie
逆向时,有的cookie有时是js逻辑生成,有些是服务端传递过来的信息保存在cookie中的,并且在发起请求时,要求携带cookie才能访问,所以可以使用requests.session()
方法来实现保持某些参数或设置(如HTTP头部或cookies)持续有效的方式,从而可以跨多个请求使用,简单来讲就是保存复用一些请求信息。它也可以在多个请求之间保持连接,提高性能。
以获取某音直播间的请求为例,实现把请求返回的cookie信息打印出来:
def get_cookie():
url = 'https://live.douyin.com/862053325650'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}
session = requests.session()
res = session.get(url=url,headers=headers)
cookie = res.cookies.get_dict() # 获取cookie的字典形式
print(cookie)
if __name__ == '__main__':
get_cookie()
- 运行结果:
requests实现重定向
有些url在访问时会重定向到其他的url中,例如某音https://v.douyin.com/iJt1TjwM/ 链接,访问之后会重定向至https://www.douyin.com/video/7159425803770400038
通过requests模块的allow_redirects属性实现是否允许重定向。如果为false,则不允许:
# 重定向问题
def allow_redirects_():
url = 'https://v.douyin.com/iJt1TjwM/'
headers = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/115.0.0.0 Safari/537.36 Edg/115.0.1901.203"
}
session = requests.session()
res = session.get(url=url,headers=headers,allow_redirects=False)
print(res.headers['Location'])
if __name__ == '__main__':
allow_redirects_()
打印请求头中的信息结果如下:
https://www.iesdouyin.com/share/video/7159425803770400038/?region=CN&mid=6561607140687547149&u_code=17h0ci10l&did=MS4wLjABAAAAcSmykqYaTLSPZRJQSHEjmilMsqba_ai3q1UXPu5wZBk&iid=MS4wLjABAAAAZqf-qpwMT5i7RcVlaxSjdZgBBwB_k9RZSEOPq6gjBwA&with_sec_did=1&titleType=title&share_sign=DZKdBgMWytRDqCfHBAoENkGCqvqdqrQ.eLtWZ98rSjY-&share_version=260500&ts=1692756972&from_ssr=1&utm_source=copy&utm_campaign=client_share&utm_medium=android&app=aweme Process finished with exit code 0
这里返回了一个新的url,这个url的作用是跳转到最终链接。
一般逆向时遇到重定向可能需要分析重定向中间的部分逻辑,所以会用到allow_redirects。
此处评论已关闭