gpt4 book ai didi

Python 请求获取 ('Connection aborted.' , BadStatusLine ("' '",)) 错误

转载 作者:IT老高 更新时间:2023-10-28 22:21:46 24 4
gpt4 key购买 nike

def download_torrent(url):
fname = os.getcwd() + '/' + url.split('title=')[-1] + '.torrent'
try:
schema = ('http:')
r = requests.get(schema + url, stream=True)
with open(fname, 'wb') as f:
for chunk in r.iter_content(chunk_size=1024):
if chunk:
f.write(chunk)
f.flush()
except requests.exceptions.RequestException as e:
print('\n' + OutColors.LR + str(e))
sys.exit(1)

return fname

在该代码块中,当我运行完整脚本时出现错误。当我去实际下载种子时,我得到:

('Connection aborted.', BadStatusLine("''",))

我只发布了我认为与上面相关的代码块。整个脚本如下。它来自 pantuts,但我认为它不再被维护,我正试图让它与 python3 一起运行。根据我的研究,该错误可能意味着我使用的是 http 而不是 https,但我都尝试过。

Original script

最佳答案

您收到的错误表明主机未按预期方式响应。在这种情况下,这是因为它检测到您正在尝试抓取它并故意断开您的连接

如果您尝试使用来自测试网站的此 URL 的 requests 代码:http://mirror.internode.on.net/pub/test/5meg.test1 ,你会看到它正常下载了。

要解决这个问题,请伪造您的 user agent . 您的用户代理会识别您的网络浏览器,网络主机通常会检查它以检测机器人。

使用 headers 字段来设置您的用户代理。这是一个告诉网络主机您是 Firefox 的示例。

headers = { 'User-Agent': 'Mozilla/5.0 (Windows NT 6.0; WOW64; rv:24.0) Gecko/20100101 Firefox/24.0' }
r = requests.get(url, headers=headers)

网络主机可以检查机器人和人工操作的浏览器之间的许多其他差异1,但用户代理是最简单和常见的差异之一。

如果你想让你的爬虫更难被检测到,你会想要使用像 headless Chrome 这样的 headless 浏览器。 2(或 ghost.py,如果你想坚持使用 Python),你可以相信它会像真正的浏览器一样运行(因为它是!)。


脚注:

1可能的其他检查包括检查图像是否没有被下载,页面资源是否没有按正常顺序下载,页面下载速度是否超过人类阅读速度,和 cookie 设置不正确。 Google 会标记被认为不够像人类的鼠标 Action 。

2Headless Chrome 是 2018 年最称职的 headless 浏览器,但如果它的重量对你来说是个问题,它的稍微过时的前辈,PhantomJSghost.py ,重量更轻,仍然可用。

关于Python 请求获取 ('Connection aborted.' , BadStatusLine ("' '",)) 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33174804/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com