请求与卷曲

时间:2021-05-18 18:08:50

标签: python-3.x curl python-requests

我有一个在 AWS 上运行的应用程序,它向页面发出请求以使用 requests 提取元标记。我发现该页面允许 curl 请求,但不允许来自 requests 库的请求。

作品:

curl https://www.seattletimes.com/nation-world/mount-st-helens-which-erupted-41-years-ago-starts-reopening-after-covid-closures/

永远挂起:

imports requests
requests.get('https://www.seattletimes.com/nation-world/mount-st-helens-which-erupted-41-years-ago-starts-reopening-after-covid-closures/')

这里的 curl 和 requests 有什么区别?我应该生成一个 curl 进程来提出我的请求吗?

1 个答案:

答案 0 :(得分:2)

以下任一代理确实有效。还可以使用 user_agent 模块(位于 pypi here 上)生成随机且有效的网络用户代理。

import requests

agent = (
    "Mozilla/5.0 (X11; Linux x86_64) "
    "AppleWebKit/537.36 (KHTML, like Gecko) "
    "Chrome/85.0.4183.102 Safari/537.36"
)

# or can use
# agent = "curl/7.61.1"

url = ("https://www.seattletimes.com/nation-world/"
       "mount-st-helens-which-erupted-41-years-ago-starts-reopening-after-covid-closures/")

r = requests.get(url, headers={'user-agent': agent})

或者,使用 user_agent 模块:

import requests
from user_agent import generate_user_agent

agent = generate_user_agent()

url = ("https://www.seattletimes.com/nation-world/"
       "mount-st-helens-which-erupted-41-years-ago-starts-reopening-after-covid-closures/")

r = requests.get(url, headers={'user-agent': agent})

进一步解释一下,requests 设置了一个默认的用户代理 here,西雅图时间正在阻止这个用户代理。但是,使用 python-requests 可以轻松更改请求中的标头参数,如上所示。

举例说明默认参数:

r = requests.get('https://google.com/')
print(r.request.headers)
>>> {'User-Agent': 'python-requests/2.25.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}

对比更新后的头参数

agent = "curl/7.61.1"
r = requests.get('https://google.com/', headers={'user-agent': agent})
print(r.request.headers)
>>>{'user-agent': 'curl/7.61.1', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'Connection': 'keep-alive'}