簡體   English   中英

如何在 Python 請求中正確使用代理?

[英]How to properly use proxies in Python requests?

我有一個代理列表。 當我使用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'

沒有任何效果,總是出現這個錯誤,如何解決?

編輯:剛剛看到您嘗試不同方式的最后一條說明,這與我的第一個建議一致。 您可能想在我稍后的建議中嘗試使用os庫設置代理。

有兩點讓我印象深刻:

  1. 您在 curl 命令中使用https://xxx:port ,但在 Python 中使用了xxx:port 您可能必須包含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"

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

Windows

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM