Передача списка пар ключ-значение в запросах Python - PullRequest
0 голосов
/ 29 апреля 2020

Я пытаюсь опубликовать некоторые параметры на сервере, используя REST. Я пытаюсь составить запрос о достижении следующего URL.

https://example.com/rest/server.php?var [0] [a] = 1 & var [0] [b] = 23

я пытаюсь выполнить следующее, но это не работает.

params =  {"var": [{'a':1, 'b':23}]}
resp = requests.post("https://example.com/rest/server.php",
                    data = json.dumps(params))

Я вижу, что в request.body параметры передаются, как показано ниже

{"var": [{"a": 1, "b": 23}]}

1 Ответ

0 голосов
/ 29 апреля 2020

Ваш код делает именно то, что вы говорите, а именно:

  • Используйте параметры POST вместо GET,
  • Отформатируйте данные параметра как json.

Вместо этого вы хотите использовать параметры GET, отформатированные нестандартным способом.

Возможно, что-то подобное может помочь вам в следующем:

def encode_params(params, head = None):
    output = []
    if head is None:
        head = ''
    if isinstance(params, dict):
        for k,v in params.items():
            output.extend(encode_params(v, '%s[%s]' % (head,k)))
    elif isinstance(params, list) or isinstance(params, tuple):
        for k,v in enumerate(params):
            output.extend(encode_params(v, '%s[%s]' % (head,k)))
    else:
        return ['%s=%r' % (head, params)]

    return output

encoded_args = ','.join([','.join(encode_params(v, k)) for k,v in params.items()])

Это, безусловно, может быть улучшено дальше, но это может дать вам преимущество. Вам нужно будет добавить некоторые проверки работоспособности, такие как urllib.parse.quote_plus(...) или что-то, что предотвращает непосредственное добавление аргументов, таких как '] ['.

...