0

我正在尝试使用 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}]}
4

1 回答 1

0

您的代码完全按照您的要求执行,即:

  • 使用 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(...)阻止直接添加 '][' 之类的参数。

于 2020-04-29T13:43:13.307 回答