2012-02-26 222 views
0

有人可以向我解釋爲什麼在urllib2中執行以下操作。python urllib2 for http和https工作區別

當我通過使用http再次編碼參數 而在HTTPS的情況下,它不會再次進行urlencode編碼URL

因此,可以說在(HTTP)調用是http //:example.com?email=阿米特%40sethi.com請求是

http://example.com?email=amit%2540sethi.com

其中如在HTTPS的情況下,它是

https://example.com?email=amit%40sethi.com

感謝

編輯:添加更多的細節

我提出的基本要求是

SF_EXTEND_RESOURCE = "https://www.superfax.in/api/voice/planchange/?" 

params_dict = {'username':USERNAME, 
           'password':PASSWORD, 
           'email':str(user.email) 
           } 
_url = SF_EXTEND_RESOURCE + urlencode(params_dict) 
response = urllib2.urlopen(_url).read() 

現在我的問題是,當我使用HTTP電子郵件字符串作爲編碼兩次哪裏https不是這種情況。我在ubuntu Lucid上使用Python 2.6.5。我無法理解這是不是可重複的。

+0

無法重現這一點,在打開URL和http後,查詢字符串在任何情況下都不會再次編碼。請張貼您正在使用的實際代碼和/或您如何得出這個結論。 – 2012-02-26 16:16:43

回答

1

我剛剛試過了,對我而言,行爲並不是你觀察到的:對我而言,http和https URL的工作原理是一樣的。

import urllib2 

out = urllib2.urlopen("https://www.google.com/?q=foo%40bar"); 
print out.geturl() 
open('out1', 'w').write(out.read()) 
out = urllib2.urlopen("http://www.google.com/?q=foo%40bar"); 
print out.geturl() 
open('out2', 'w').write(out.read()) 

比較out1out2,你會發現在搜索框中的「值」屬性,無論是正確的foo的@酒吧,所以似乎沒有被任何編碼雙回事。