[PYTHON] 파이썬 요청이 내 URL을 백분율로 인코딩하는 것을 방지하려면 어떻게해야합니까?
PYTHON파이썬 요청이 내 URL을 백분율로 인코딩하는 것을 방지하려면 어떻게해야합니까?
파이썬에서 requests.get ()을 사용하여 다음 형식의 URL을 얻으려고합니다.
http://api.example.com/export/?format=json&key=site:dummy+type:example+group:wheel
#!/usr/local/bin/python
import requests
print(requests.__versiom__)
url = 'http://api.example.com/export/'
payload = {'format': 'json', 'key': 'site:dummy+type:example+group:wheel'}
r = requests.get(url, params=payload)
print(r.url)
그러나 URL은 인코딩 된 백분율을 얻고 예상되는 응답을 얻지 못합니다.
2.2.1
http://api.example.com/export/?key=site%3Adummy%2Btype%3Aexample%2Bgroup%3Awheel&format=json
이 URL을 직접 전달하면 작동합니다.
url = http://api.example.com/export/?format=json&key=site:dummy+type:example+group:wheel
r = requests.get(url)
백분율 인코딩없이 원래 형식으로 매개 변수를 전달할 수있는 방법이 있습니까?
감사!
해결법
-
==============================
1.좋은 해결책은 아니지만 문자열을 사용할 수 있습니다.
좋은 해결책은 아니지만 문자열을 사용할 수 있습니다.
r = requests.get(url, params='format=json&key=site:dummy+type:example+group:wheel')
BTW :
payload = {'format': 'json', 'key': 'site:dummy+type:example+group:wheel'} payload_str = "&".join("%s=%s" % (k,v) for k,v in payload.items()) # 'format=json&key=site:dummy+type:example+group:wheel' r = requests.get(url, params=payload_str)
-
==============================
2.설계된대로이 솔루션은 URL을 직접 전달하는 것입니다.
설계된대로이 솔루션은 URL을 직접 전달하는 것입니다.
-
==============================
3.다른 누군가가이 문제를 우연히 만난다면 요청을 서브 클래 싱 할 수 있습니다. 세션, send 메소드를 무시하고 원시 URL을 변경하고 퍼센트 인코딩 등을 수정합니다. 아래 수정 사항을 환영합니다.
다른 누군가가이 문제를 우연히 만난다면 요청을 서브 클래 싱 할 수 있습니다. 세션, send 메소드를 무시하고 원시 URL을 변경하고 퍼센트 인코딩 등을 수정합니다. 아래 수정 사항을 환영합니다.
import requests, urllib class NoQuotedCommasSession(requests.Session): def send(self, *a, **kw): # a[0] is prepared request a[0].url = a[0].url.replace(urllib.quote(","), ",") return requests.Session.send(self, *a, **kw) s = NoQuotedCommasSession() s.get("http://somesite.com/an,url,with,commas,that,won't,be,encoded.")
-
==============================
4.위의 답변은 저에게 효과적이지 않았습니다.
위의 답변은 저에게 효과적이지 않았습니다.
매개 변수에 파이프가 들어있는 요청을하려고했지만 파이썬 요청도 파이프를 퍼센트로 인코딩합니다. 그래서 대신 나는 urlopen을 사용했다.
# python3 from urllib.request import urlopen base_url = 'http://www.example.com/search?' query = 'date_range=2017-01-01|2017-03-01' url = base_url + query response = urlopen(url) data = response.read() # response data valid print(response.url) # output: 'http://www.example.com/search?date_range=2017-01-01|2017-03-01'
-
==============================
5.이 github 링크의 첫 번째 옵션을 살펴보십시오. prep.url = url + qry 대신 prep.url = url을 의미하는 urlibpart를 무시할 수 있습니다.
이 github 링크의 첫 번째 옵션을 살펴보십시오. prep.url = url + qry 대신 prep.url = url을 의미하는 urlibpart를 무시할 수 있습니다.
from https://stackoverflow.com/questions/23496750/how-to-prevent-python-requests-from-percent-encoding-my-urls by cc-by-sa and MIT license
'PYTHON' 카테고리의 다른 글
[PYTHON] Cython : cimport 및 가져 오기 numpy로 (모두) np (0) | 2018.11.22 |
---|---|
[PYTHON] super ()와 superclass를 직접 호출하는 것의 차이점 (0) | 2018.11.22 |
[PYTHON] 파이썬으로 거대한 텍스트 파일을 분할하는 방법 (0) | 2018.11.22 |
[PYTHON] 파이썬으로 MTP USB 장치에 접근하는 법 (0) | 2018.11.22 |
[PYTHON] matplotlib로 numpy datetime64 플롯 (0) | 2018.11.22 |