Параметры массива Querystring в Python с использованием запросов

Я пытался выяснить, как использовать python-requests для отправки запроса, который выглядит так:

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

Обычно я могу создать словарь и делать:

  • проверить, открыт ли файл в Python
  • Объект PipelinedRDD не имеет атрибута 'toDF' в PySpark
  • Игнорировать регистр в строках Python
  • Какова верхняя и нижняя граница для китайского символа в UTF-8?
  • Подавление научной нотации в Numpy при создании массива из вложенного списка
  • Почему numpy.histogram (Python) опускает один элемент по сравнению с hist в Matlab?
  •  data = {'name': 'hello', 'data': 'world'} response = requests.get('http://example.com/api/add.json', params=data) 

    Это прекрасно работает для всего, что я делаю. Тем не менее, я ударил структуру url сверху, и я не уверен, как это сделать в python без ручного создания строк. Я могу это сделать, но скорее не буду.

    Есть ли что-то в библиотеке запросов, которую я пропускаю, или какую-либо функцию python, о которой я не знаю?

    Также, что вы даже называете таким параметром, чтобы я мог лучше это сделать?

  • Измерьте время функции с аргументами в Python
  • Могу ли я написать части кода Google App Engine на Java, другие части на Python?
  • Запустить python в C ++
  • Как использовать клиентский плагин reCaptcha для проверки подлинности?
  • Ошибка сокета Postgresql при запуске Django syncdb (mac OS 10.7.5)
  • как читать массив чисел из текстового файла в python
  • 3 Solutions collect form web for “Параметры массива Querystring в Python с использованием запросов”

    То, что вы делаете, является правильным. Получаемый URL-адрес тот же, что и ожидаете.

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

    u может видеть результирующий URL:

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

    Согласно формату url :

    В частности, при кодировании строки запроса используются следующие правила:

    • Буквы (A-Z и a-z), числа (0-9) и символы . , - , ~ и _ оставлены как-есть
    • SPACE кодируется как + или %20
    • Все остальные символы кодируются как шестнадцатеричное представление% HH с любыми символами, отличными от ASCII, которые сначала кодируются как UTF-8 (или другая указанная кодировка)

    Таким образом, array[] будет не таким, как ожидалось, и будет автоматически заменен в соответствии с правилами:

    Если вы создадите URL-адрес, например:

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

    OutPut будет:

     >>> 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' 

    Это связано с тем, что дублирование будет заменено последним значением ключа в url, а data[] будут заменены data%5B%5D .

    Если data%5B%5D не являются проблемой (если сервер способен правильно ее разобрать), тогда вы можете продолжить его.

    Ссылка источника

    Все, что вам нужно сделать, это поместить его в список и сделать ключ как список вроде строки :

     data = {'name': 'hello', 'data[]': ['hello', 'world']} response = requests.get('http://example.com/api/add.json', params=data) 

    Одно решение при использовании модуля запросов не является обязательным, используется комбинация urllib / urllib2 :

     payload = [('name', 'hello'), ('data[]', ('hello', 'world'))] params = urllib.urlencode(payload, doseq=True) sampleRequest = urllib2.Request('http://example.com/api/add.json?' + params) response = urllib2.urlopen(sampleRequest) 

    Он немного более подробный и использует метод доза (uence) для кодирования параметров URL, но я использовал его, когда я не знал о модуле запросов.

    Для модуля запросов ответ должен быть предоставлен @Tomer.

    Python - лучший язык программирования в мире.