2017-08-08 3 views
0

期間を正しく処理しないREST APIを使用しようとしています。API要求で符号化された期間を強制的に実行します。

http://api.com/endpoint?myparameter=includes%20aで失敗します。

しかし、期間がこのように%2Eとしてエンコードされたときにそれが正常に動作します:

http://api.com/endpoint?myparameter=includes%20a%2E

が正常に動作します。

リクエストを使用すると、%2Eはいつも "。"に変換されているようです。

この現象を回避する手段はありますか?

答えて

0

デフォルトでリクエストがrequests.utilrequote_uri(uri)機能を使用して、予約されていない文字を取り消すことができますので、これを動作させるにはPrepared Requestsを使用できます。あなたは既に解析され、URLを自分で準備されている場合は、次の操作を行うとurlフィールド上書きすることができます:

from requests import Session, Request 

s = Session() 

req = Request('GET', 'http://localhost:8008?name=kevin%2Eemckinsey') 

# This will use `requote_uri` to unquote unreserved characters so %2E becomes a `.` 
prepped = req.prepare() 

# Forcing the `url` field to be a URL we specified. 
prepped.url = 'http://localhost:8008?name=kevin%2Emckinsey' 

resp = s.send(prepped) 

print(resp.url) 
print(resp.json()) 

# http://localhost:8008?name=kevin%2Emckinsey 
# PHP's $_SERVER['REQUEST_URI'] returns: 
# {'name': '/?name=kevin%2Emckinsey'} 

をこれは私に汚いトリックのように思えるが、私の知る限り、UNQUOTEしないように要求を伝える方法はありません特定の文字。

+0

ありがとうございます!それは確かに問題を回避しました。 –

関連する問題