逆向时需要模拟请求的发送,所以需要掌握发送请求的模块。

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中的工具快速转换:

image.png(选中转换内容,右键使用插件即可)

  • 第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()
  • 运行结果:image.png

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。

最后修改:2024 年 03 月 13 日
如果觉得我的文章对你有用,请随意赞赏