首页 > 解决方案 > 如何在 Python 请求中正确使用代理?

问题描述

我有一个代理列表。当我使用以下方法测试其中一个时curl

curl -proxy https://x.x.x:port https://www.google.com/

我得到了预期的结果,但是当我运行时:

proxies = {'http' : 'x.x.x:port', 'https' : 'x.x.x:port'}
requests.get('https://www.google.com/', proxies = proxies)

它卡住了一段时间,然后我收到此错误:

requests.exceptions.ProxyError: HTTPSConnectionPool(host='www.google.com', port=443): Max retries exceeded with url: / (Caused by ProxyError('Cannot connect to proxy.', ConnectionResetError(104, 'Connection reset by peer')))

我尝试了不同的代理定义方式,例如:

'http' : 'http://x.x.x:port', 'https' : 'https://x.x.x:port'

没有任何效果,总是出现这个错误,如何解决?

标签: pythonproxypython-requests

解决方案


编辑:刚刚看到您尝试不同方式的最后一条说明,这与我的第一个建议一致。您可能想os在我稍后的建议中尝试使用库设置代理。

有两点让我印象深刻:

  1. https://x.x.x:port在 curl 命令中使用过,但 x.x.x:port在 Python 中使用过。您可能必须包括https://.

  2. 您同时使用了 http 和 https。我认为这不会导致错误,但仍然值得研究

首先,我建议包括https://这样的:

proxies = {'https' : 'https://x.x.x:port'}  
requests.get('https://www.google.com/', proxies = proxies) 

其次,我会尝试设置 https(如果失败,请尝试设置 http):

import requests

proxies = {
  'https': 'https://x.x.x.x:port',
}

requests.get('https://example.org', proxies=proxies)

此外,您可以通过 Python 设置环境代理,例如:

import os
os.environ["http_proxy"] = "http://x.x.x.x:port"
os.environ["https_proxy"] = "https://x.x.x.x:port"

或通过命令行/命令提示符

视窗

set http_proxy=http://x.x.x.x:port
set https_proxy=https://x.x.x.x:port

Linux/OS X:

export http_proxy=http://x.x.x.x:port
export https_proxy=https://x.x.x.x:port

推荐阅读