복붙노트

[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. ==============================

    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. ==============================

    2.설계된대로이 솔루션은 URL을 직접 전달하는 것입니다.

    설계된대로이 솔루션은 URL을 직접 전달하는 것입니다.

  3. ==============================

    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. ==============================

    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. ==============================

    5.이 github 링크의 첫 번째 옵션을 살펴보십시오. prep.url = url + qry 대신 prep.url = url을 의미하는 urlibpart를 무시할 수 있습니다.

    이 github 링크의 첫 번째 옵션을 살펴보십시오. prep.url = url + qry 대신 prep.url = url을 의미하는 urlibpart를 무시할 수 있습니다.

  6. from https://stackoverflow.com/questions/23496750/how-to-prevent-python-requests-from-percent-encoding-my-urls by cc-by-sa and MIT license