2015-05-18 48 views
0

如何轉義@代理服務器的密碼字符。所以Python可以正確地創建請求。我試過\\,但仍然無法正確地打中網址。http請求通過代理服務器在python中擁有@的密碼

proxy = { 
     "http": "http://UserName:[email protected]:Port_No" 
    } 

更新問題:

我使用python請求模塊的http請求。它從第一次出現@分割字符串(獲得主機),因爲它假設從第二個@開始分割。

Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 55, in get 
    return request('get', url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/api.py", line 44, in request 
    return session.request(method=method, url=url, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 335, in request 
    resp = self.send(prep, **send_kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/sessions.py", line 438, in send 
    r = adapter.send(request, **kwargs) 
    File "/usr/local/lib/python2.7/dist-packages/requests/adapters.py", line 327, in send 
    raise ConnectionError(e) 
requests.exceptions.ConnectionError: HTTPConnectionPool(host='[email protected]', port=XXXXX): Max retries exceeded with url: http:/URL (Caused by <class 'socket.gaierror'>: [Errno -2] Name or service not known) 
+0

是的,但沒有運氣 – Naresh

+0

問題中第二次出現「@」的位置在哪裏? – mhawke

+0

一個在密碼中,第二個是密碼和ip的分隔符,即'username:st @ ckoverflow @ 192.168.1.200:12345' – Naresh

回答

-1

你沒有提到你正在使用的庫爲了執行你的HTTP請求,所以你應該考慮使用requests,不僅僅是爲了解決這個問題,而是因爲它是一個偉大的庫。

下面是如何使用proxy基本身份驗證:

import requests 

proxy = {'http': 'http://UserName:[email protected]:Port_No'} 
r = requests.get("http://whereever.com", proxies=proxy) 

更新

與請求和代理網址試驗成功:


相反,如果你需要使用Python的urllib2庫,你可以這樣做:

import urllib2 

handler = urllib2.ProxyHandler({'http': 'http://UserName:[email protected]:Port_No'}) 
opener = urllib2.build_opener(handler) 
r = opener.open('http://whereever.com') 

注意,在兩種情況下是有必要逃避@

第三個選項是設置環境變量HTTP_PROXY和/或HTTPS_PROXY(以* nix爲單位)。

+0

我已經更新了這個問題,當我使用請求模塊時,確實發生錯誤。如果我不更改密碼@ – Naresh

+0

@Naresh:好的,我發現我誤解了密碼字段中包含'@'的問題。您是否嘗試按照jhinghaus的建議urlencode URL? – mhawke

+0

@Naresh:實際上,它在密碼中使用'@',即2'@'字符,如'http://用戶名:PassWord @ 1234 @ 127.0.0.1:1234'和'http://用戶@名稱:PassWord @ 1234 @ 127.0.0.1:1234'等我正在使用請求版本1.2.3。你使用什麼版本? – mhawke

0

這是簡單的Python腳本:當密碼包含 「@」 的要求,錯誤

IP =「XX.XX.XX.失敗XX 「

用戶名= '管理員'

密碼= 」kdsjkj @監管局「

頭= { 」內容類型「: 」應用/ JSON「, 」接受「:」 應用/ JSON 「}

PARAMS = {}

PARAMS [」 用戶名 「] =用戶名

PARAMS [」 密碼「] =密碼

baseURL時= 「https://ip:port/storagemgr/rest

R = requests.post(baseURL時,則params =參數,標頭=報頭,校驗=假)

輸出:

描述:發生於該參數的錯誤

建議:輸入正確的參數

同樣的事情上正常工作curl命令

curl -k -H「Content-Type:application/json」-X POST -d'{「username」:「admin」,「password」:「x @ xxx」}'https://xx.xx.xx.xx:/ storagemgr/rest

你可以提出任何解決方案。我嘗試過使用代理,它不工作。