2014-01-10 69 views
3

我正在使用Kenneth Retiz的優秀請求包進行Web請求。 Requests Github repository在python3請求中傳遞參數時無需轉義

有時候,我需要在用逗號分隔的參數傳遞,但逗號不是URL編碼,也就是我的網址是這樣的

http://example.site.com/customers?fields=id,first_name,last_name 

我無法弄清楚如何格式化查詢參數就是這樣出來的。逗號總是會被轉移到%2C。

我嘗試下面的代碼,但是,這並不工作:

params['fields'] = 'id,first_name,last_name' 
url = 'http://example.site.com/customers'  
ex = requests.get(url, params = params) 

感謝。

+0

供參考,逗號是「[保留字符]( http://tools.ietf.org/html/rfc3986#section-2.2)「,並且*應該被編碼。服務器在使用前解碼參數。你能擴展你爲什麼要讓逗號通過非轉義嗎? –

+0

請考慮以下網址:http://httpbin.org/get?fields = a%2cb%2cc。如果你點擊它,你會看到httpbin服務器接收到一個編碼的URL,但是正確解碼了「fields」參數。 –

回答

2

當你說「我的網址看起來像這樣:http://example.site.com/customers?fields=id,first_name,last_name」時,我認爲你的意思就是你的網址在你的瀏覽器中的樣子。關於瀏覽器如何向您顯示URL的重要一點是,爲了便於閱讀,他們將爲了顯示目的而對URL進行取消編碼,但是當您訪問該URL時,他們實際上會發送編碼版本。

由於搶在你的問題的意見已經提到,沒有充分的理由不斷髮送逗號未編碼的但是,這並不意味着不允許請求此,它只是使得它非常困難。


隨着強烈警告的照顧,有一種方法做你想要什麼:

from requests import Session, Request 
request = Request('GET', 'https://httpbin.org/get') 
prepared = request.prepare() 
prepared.url += '?field=id,first_name,last_name' 
session = Session() 
response = session.send(prepared) 

這是非常容易出錯,因爲你沒有確切檢查任何添加自己的參數但是這會幫助你實現你在問題中提出的問題。它旁邊的步驟要求爲你做,並允許你做你想做的事。但是,我強烈建議您閱讀關於如何實現其他所有可能從通用請求API中獲得的所有其他內容的高級文檔,例如流式處理,證書驗證等。

+0

謝謝,這清除了我的困惑。 –