簡體   English   中英

Python請求:帶有百分比字符的URL

[英]Python requests: URL with percent character

我一直在各地搜索此文件,但無法解決問題。

我正在使用本地API來獲取一些數據,在該API中,通配符是百分比字符%

該URL如下所示: urlReq = 'http://myApiURL?ID=something&parameter=%w42'

然后將其傳遞給get函數:

req = requests.get(urlReq,auth=HTTPBasicAuth(user, pass))

並得到以下錯誤: InvalidURL: Invalid percent-escape sequence: 'w4'

我嘗試使用%%轉義%字符,但徒勞無功。 我還嘗試了以下方法:

urlReq = 'http://myApiURL?ID=something&parameter=%sw42' % '%'但效果不佳。

有誰知道如何解決這個問題?

PS我正在使用Python 2.7.8 :: Anaconda 1.9.1(64位)

您應該看看urllib.quote應該可以解決問題。 看看文檔以供參考。

擴展此答案:問題在於, % (+十六進制數字)是URL中特殊字符的轉義序列 如果您希望服務器解釋您的%文字,也需要對其進行轉義,方法是將其替換為%25 前面提到的qoute函數可以為您完成類似的工作。

requests通過將params參數中的params傳遞給params requests.get()來為您構造查詢字符串( 請參閱文檔 ):

api_url = 'http://myApiURL'
params = {'ID': 'something', 'parameter': '%w42'}
r = requests.get(api_url, params=params, auth=(user, pass))

然后, requests應為您對查詢字符串中的參數進行百分比編碼。 話雖如此,至少在我的計算機上requests版本2.11.1時,我發現%在傳遞到url中時已被編碼,因此也許您可以檢查所使用的版本。

同樣,對於基本身份驗證,您可以簡單地在一個元組中傳遞用戶名和密碼,如上所示。

requests你應該使用requests.compat.quote_plus這里的采取alook

例如:

>>> requests.compat.quote_plus('example: parameter=%w42')
'example%3A+parameter%3D%25w42'

歸功於@Tryph:

%用於在網址中編碼特殊字符。 您可以使用此序列%25對%字符進行編碼。 請參閱此處以了解更多詳細信息: w3schools.com/tags/ref_urlencode.asp

暫無
暫無

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

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