gpt4 book ai didi

python - 如何解决请求无法通过 VPN 工作?

转载 作者:行者123 更新时间:2023-12-03 21:22:06 28 4
gpt4 key购买 nike

我正在尝试使用 python 中的请求来抓取网站。

url = "https://stackoverflow.com/questions/23013220/max-retries-exceeded-with-url"
# set the headers like we are a browser,
headers = {'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_13_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.106 Safari/537.36'}

# download the homepage
s = requests.Session()
s.trust_env = False
response = s.get(url, headers=headers )

当我使用我的个人 wifi 时,这工作正常。但是,当我连接到我公司的 VPN 时,出现以下错误。

ConnectionError: HTTPSConnectionPool(host='stackoverflow.com', port=443): Max retries exceeded with url:/questions/23013220/max-retries-exceeded-with-url (Caused by NewConnectionError(': Failed to build a new connection : [WinError 10061] 无法建立连接,因为目标机器主动拒绝它',))

现在,我需要它在我公司的 VPN 上工作,因为我需要访问一个只能在其中工作的网站。如何解决这个问题?

最佳答案

就我而言,问题与 IPv6 有关。
我们的 VPN 使用了拆分隧道,而且 VPN 配置似乎不支持 IPv6。
例如,这将永远挂起:

requests.get('https://pokeapi.co/api/v2/pokemon')
但是如果添加超时,则请求成功:
requests.get('https://pokeapi.co/api/v2/pokemon', timeout=1)
但并非所有机器都有这个问题。所以我比较了两台不同机器之间的输出:
import socket

for line in socket.getaddrinfo('pokeapi.co', 443):
print(line)
工作的只返回 IPv4 地址。非工作机器返回 IPv4 和 IPv6 地址。
因此,在指定超时后,我的理论是 python 使用 IPv6 快速失败,然后移动到请求成功的 IPv4。
最终我们通过在机器上禁用 IPv6 解决了这个问题:
networksetup -setv6off "Wi-Fi"
但我认为这可以通过 VPN 配置来解决。

关于python - 如何解决请求无法通过 VPN 工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52725892/

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