Python 如何解决无法通过VPN工作的请求?

Python 如何解决无法通过VPN工作的请求?,python,python-requests,anaconda,Python,Python Requests,Anaconda,我正在尝试使用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, l

我正在尝试使用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):url超过了最大重试次数:/questions/23013220/url超过了最大重试次数(由NewConnectionError引起(':未能建立新连接:[WinError 10061]无法建立连接,因为目标计算机主动拒绝了它',))


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

这样试试怎么样:

url = "https://stackoverflow.com/questions/23013220/max-retries-exceeded-with-url"
ua = UserAgent()
headers = headers = {"User-Agent": ua.random}

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

这似乎是由
UserAgent()
设置差异造成的。

尝试设置
trust\u env=None

信任环境=无# 代理配置、默认身份验证等的信任环境设置

或者,您可以禁用特定域的代理


在我的例子中,问题与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,请求在IPv4中成功

最终,我们通过在计算机上禁用IPv6解决了这一问题:

networksetup -setv6off "Wi-Fi"

但我认为这可以通过VPN配置来解决。

在我的组织中,我必须在不同地理位置的VPN下运行我的程序。所以我们有多种代理配置

我发现使用名为的包自动获取代理详细信息更简单

from pypac import PACSession
from requests.auth import HTTPProxyAuth
session = PACSession()
# when the username and password is required
# session = PACSession(proxy_auth=HTTPProxyAuth(name, password)) 

r = session.get('http://example.org')
这是如何工作的:


包定位由组织配置的PAC文件。此文件由代理配置详细信息()组成。

@user1690356您可以使用代码访问其他网站(使用https)吗?@user1690356尝试设置标题{'Connection':'close'}或set requests.adapters.DEFAULT_RETRIES=5,发生此错误的其他原因是频繁访问
from pypac import PACSession
from requests.auth import HTTPProxyAuth
session = PACSession()
# when the username and password is required
# session = PACSession(proxy_auth=HTTPProxyAuth(name, password)) 

r = session.get('http://example.org')