gpt4 book ai didi

python-3.x - 异步 aiohttp 请求失败,但同步请求成功

转载 作者:行者123 更新时间:2023-12-04 14:11:40 32 4
gpt4 key购买 nike

使用以下代码我得到 Cannot connect to host ...:443 ssl:True当我使用异步 aiohttp .当我使用同步 requests ,它成功了。
whitehouse.gov链接失败,但 google.com异步和同步情况都成功。

出了什么问题?这是在 FreeBSD8 上使用 python 3.4.2,aiohttp 0.14.4,请求 2.5.3

import asyncio
import aiohttp
import requests

urls = [
'http://www.whitehouse.gov/cea/',
'http://www.whitehouse.gov/omb',
'http://www.google.com']


def test_sync():
for url in urls:
r = requests.get(url)
print(r.status_code)


def test_async():
for url in urls:
try:
r = yield from aiohttp.request('get', url)
except aiohttp.errors.ClientOSError as e:
print('bad eternal link %s: %s' % (url, e))
else:
print(r.status)


if __name__ == '__main__':
print('async')
asyncio.get_event_loop().run_until_complete(test_async())
print('sync')
test_sync()

输出结果是:
async
bad eternal link http://www.whitehouse.gov/cea: Cannot connect to host www.whitehouse.gov:443 ssl:True
bad eternal link http://www.whitehouse.gov/omb: Cannot connect to host www.whitehouse.gov:443 ssl:True
200
sync
200
200
200

最佳答案

我怀疑您的机器上的证书验证链已损坏。
正如@dano 提到的,在 Ubuntu 上一切正常。

无论如何,您可以通过创建自定义 Connector 来禁用 ssl 验证。实例:

import asyncio
import aiohttp

urls = [
'http://www.whitehouse.gov/cea/',
'http://www.whitehouse.gov/omb',
'http://www.google.com']


def test_async():
connector = aiohttp.TCPConnector(verify_ssl=False)
for url in urls:
try:
r = yield from aiohttp.request('get', url, connector=connector)
except aiohttp.errors.ClientOSError as e:
print('bad eternal link %s: %s' % (url, e))
else:
print(r.status)


if __name__ == '__main__':
print('async')
asyncio.get_event_loop().run_until_complete(test_async())

顺便说一句, requests库附带自己的证书包。也许我们需要对 aiohttp 做同样的事情?

更新。 另见 https://github.com/aio-libs/aiohttp/issues/341

关于python-3.x - 异步 aiohttp 请求失败,但同步请求成功,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29827642/

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