2016-10-21 15 views
0

私はこの場所のすべてを探していますが、私は問題を解決できませんでした。Pythonリクエスト:パーセント記号のURL

ローカル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' % '%'しかし、それもうまくいきませんでした。

誰もこれを解決する方法を知っていますか?トリックを行う必要があります - 私は、Python 2.7.8 を使用しています::アナコンダ1.9.1(64ビット)

+0

'%'はURLの特殊文字をエンコードするために使用されます。 '% '文字をこのシーケンス'%25'でエンコードすることができます。詳細についてはこちらをご覧ください:http://www.w3schools。com/tags/ref_urlencode.asp – Tryph

+0

ありがとうございました!今は完璧に動作しています。 – Elie

答えて

0

クレジット:

%は、URLでの特殊文字をエンコードするために使用されます。このシーケンス%25で%文字をエンコードすることができます。詳細についてはこちらを参照してください。w3schools.com/tags/ref_urlencode.asp

+0

私のコメントは、MauriceとHisham Karamが言及しているように、特殊文字を自動的にエンコードする関数を使用しないようにしてくれません – Tryph

4

をあなたはurllib.quoteを見ている必要があり

PS。参照のためにdocsを見てください。

この回答を拡張するには問題があります。%(+ 16進数)は、URLの特殊文字の場合はescape sequenceです。サーバーがあなたの%をリテラルに解釈するようにするには、それをエスケープする必要があります。これは%25に置き換えて行います。前述のqoute関数は、あなたのためのものです。 @Tryphへ

0

requestsにあなたがrequests.compat.quote_plusを使用する必要があり、ここだtake alook

例:

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

requestsrequests.get()params引数にパラメータを渡すことによって、あなたのためのクエリ文字列を作成してみましょう(see documentation):

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に渡す際にエンコードされていることがわかりましたので、使用しているバージョンを確認できました。

また、基本認証では、上記のようにタプルでユーザー名とパスワードを渡すこともできます。

関連する問題