2016-04-28 75 views
1

我在某些Python代碼中使用requests庫,並且我需要一些幫助來瀏覽公司代理服務器的黑暗水域。關閉請求庫中的代理

考慮下面的代碼:

response = requests.get(url, proxies={...}) 

所有好爲止。 requests調用使用傳遞給它的代理。

在接下來的例子中,requests使用在環境變量定義HTTPS_PROXY代理HTTP_PROXY和:(該proxies參數默認爲無,其觸發它去,並期待在環境變量)

response = requests.get(url) 

我想要做的事情是不同的。我想讓環境變量保持原樣,因爲它們對於我使用的其他應用程序是必需的。但我希望請求不要使用代理。我已經試過:

response = requests.get(url, proxies={}) 

requests仍熄滅,並獲取環境變量代理。我似乎無法阻止它這樣做,而不會取消設置我的環境變量。

任何想法?

回答

3

trust_env variable on the session設置爲False。如果從環境中不正確的(True是默認值),代理信息會被忽略:

session = requests.Session() 
session.trust_env = False 
response = session.get(url) 

這不也禁用.netrc authentication支持。如果你需要的是,那麼你有兩個選擇,我可以看到:

  • 添加NO_PROXY環境變量;設置爲*意味着根本不應該使用代理。您可以通過直接在os.environ字典中設置密鑰來完成此操作。

  • 只需從os.environ中刪除代理密鑰即可。

    考慮到在OSX和Windows上Python也會在系統配置中查找代理(所以Windows上的註冊表和Mac OS X上的SysConf)。

改變os.environ是安全的。這是一個普通的字典,在你的程序中添加或刪除密鑰很好,父shell環境不會被改變。

+0

爲什麼'NO_PROXY'有效?在內部,'requests'只是調用'urllib.getproxies()'(我通過源代碼挖來檢查這個),它只是尋找' _proxy'形式的環境變量。一個新的環境變量如何重寫這個看似暴力的搜索空間的環境變量? –

+1

@AkshatMahajan:然後你錯過了'should_bypass_proxies()'調用。 –

+0

不錯。接得好! –