Querystring Array Parameters in Python using Requests

后端 未结 4 1335
無奈伤痛
無奈伤痛 2020-12-10 10:10

I have been trying to figure out how to use python-requests to send a request that the url looks like:

http://example.com/api/add.json?name=\'he         


        
4条回答
  •  余生分开走
    2020-12-10 10:54

    What u are doing is correct only. The resultant url is same what u are expecting.

    >>> payload = {'name': 'hello', 'data': 'hello'}
    >>> r = requests.get("http://example.com/api/params", params=payload)
    

    u can see the resultant url:

    >>> print(r.url)
    http://example.com/api/params?name=hello&data=hello
    

    According to url format:

    In particular, encoding the query string uses the following rules:

    • Letters (A–Z and a–z), numbers (0–9) and the characters .,-,~ and _ are left as-is
    • SPACE is encoded as + or %20
    • All other characters are encoded as %HH hex representation with any non-ASCII characters first encoded as UTF-8 (or other specified encoding)

    So array[] will not be as expected and will be automatically replaced according to the rules:

    If you build a url like :

    `Build URL: http://example.com/api/add.json?name='hello'&data[]='hello'&data[]='world'`
    

    OutPut will be:

    >>> payload = {'name': 'hello', "data[]": 'hello','data[]':'world'}
    >>> r = requests.get("http://example.com/api/params", params=payload)
    >>> r.url
    u'http://example.com/api/params?data%5B%5D=world&name=hello'
    

    This is because Duplication will be replaced by the last value of the key in url and data[] will be replaced by data%5B%5D.

    If data%5B%5D is not the problem(If server is able to parse it correctly),then u can go ahead with it.

    Source Link

提交回复
热议问题