Подтвердить что ты не робот

Python и urllib2: как сделать запрос GET с параметрами

Я создаю "API API", это в основном оболочка для домашнего веб-сервиса REST, к которому веб-приложение будет делать много запросов. Некоторые вызовы веб-сервисов должны быть GET, а не post, но передавать параметры.

Существует ли "лучший способ" кодирования словаря в строку запроса? например: ?foo=bar&bla=blah

Я смотрю urllib2 docs, и похоже, что он сам решает использовать POST или GET на основе, если вы пройдете params или нет, но, возможно, кто-то знает, как заставить его преобразовать словарь params в запрос GET.

Может быть, есть пакет для чего-то подобного? Было бы здорово, если бы он поддерживал keep-alive, так как веб-сервер будет постоянно запрашивать вещи у службы REST.

Идеально то, что также превратило бы XML в какой-то проходящий объект python.

Спасибо!

4b9b3361

Ответ 1

urllib.urlencode

И да, разделение труда urllib/urllib2 немного запутано в Python 2.x.

Ответ 2

urllib.urlencode() недостаточно?

>>> import urllib
>>> urllib.urlencode({'foo': 'bar', 'bla': 'blah'})
foo=bar&bla=blah

EDIT:

Вы также можете обновить существующий URL:

  >>> import urlparse, urlencode
  >>> url_dict = urlparse.parse_qs('a=b&c=d')
  >>> url_dict
  {'a': ['b'], 'c': ['d']}
  >>> url_dict['a'].append('x')
  >>> url_dict
  {'a': ['b', 'x'], 'c': ['d']}
  >>> urllib.urlencode(url_dict, True)
  'a=b&a=x&c=d'

Обратите внимание, что функция parse_qs находилась в пакете cgi до Python 2.6

EDIT 23/04/2012:

Вы также можете взглянуть на python-requests - в конце концов он должен убить urllibs:)

Ответ 3

import urllib
data = {}
data["val1"] = "VALUE1"
data["val2"] = "VALUE2"
data["val3"] = "VALUE3"
url_values = urllib.urlencode(data)
url = "https://www.python.org"
print url + "?" + url_values

url_values является закодированным значением и может использоваться для отправки на сервер вместе с url в качестве string(url+"?"+url_values) запроса string(url+"?"+url_values).