requests.get 返回 403,而相同的 url 在浏览器中有效

2024-01-09

我正在尝试使用搜索表单俄罗斯网 http://www.rlsnet.ru。这是我从源文件中提取的表单定义:

<form id="site_search_form" action="/search_result.htm" method="get">
    <input id="simplesearch_text_input" class="search__field" type="text" name="word" value="" autocomplete="off">
    <input type="hidden" name="path" value="/" id="path">
    <input type="hidden" name="enter_clicked" value="1">
    <input id="letters_id" type="hidden" name="letters" value="">
    <input type="submit" class="g-btn search__btn" value="Найти" id="simplesearch_button">
    <div class="sf_suggestion">
        <ul style="display: none; z-index:1000; opacity:0.85;">
        </ul>
    </div>
    <div id="contentsf">
    </div>
</form>

这是我用来发送搜索请求的代码:

import requests
from urllib.parse import urlencode 

root = "http://www.rlsnet.ru/search_result.htm?"
response = requests.get(root + urlencode({"word": "Церебролизин".encode('cp1251')})

每次我这样做时,响应状态都是403。当我输入相同的请求URL时(即http://www.rlsnet.ru/search_result.htm?word=%D6%E5%F0%E5%E1%F0%EE%EB%E8%E7%E8%ED)进入 Safari/Chrome/Opera,它工作正常并返回预期的页面。我究竟做错了什么?谷歌搜索这个问题只带来了这个问题:为什么 url 在浏览器中有效但不能使用 requests get 方法 https://stackoverflow.com/questions/25097093/why-url-works-in-browser-but-not-using-requests-get-method,这没什么用。


那是因为默认User-Agent of requests is python-requests/2.13.0,在您的情况下,该网站不喜欢来自“非浏览器”的流量,因此他们尝试阻止此类流量。

>>> import requests
>>> session = requests.Session()
>>> session.headers
{'Connection': 'keep-alive', 'Accept-Encoding': 'gzip, deflate', 'Accept': '*/*', 'User-Agent': 'python-requests/2.13.0'}

您所需要做的就是使请求看起来像来自浏览器,因此只需添加一个额外的header范围:

import requests

headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/56.0.2924.76 Safari/537.36'} # This is chrome, you can set whatever browser you like
response = requests.get('http://www.rlsnet.ru/search_result.htm?word=%D6%E5%F0%E5%E1%F0%EE%EB%E8%E7%E8%ED', headers=headers)

print response.status_code
print response.url

200 
http://www.rlsnet.ru/search_result.htm?word=%D6%E5%F0%E5%E1%F0%EE%EB%E8%E7%E8%ED
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

requests.get 返回 403,而相同的 url 在浏览器中有效 的相关文章

随机推荐