Python请求-为POST发送查询字符串的正确方式



这是我想要发送的内容:

https://dev.xxx.com/employee-service/login?email=apitester@xxx.com&password=xxx!xxx
Body:
{
<JSON>
}

我是这样发送的。

为什么不为参数使用字典

因为当我这么做的时候,邮件里的@和!在密码被编码。

params = 'email=' + l_email + '&password=' + l_password
l_response = requests.post(url=url, data=params, json=body, headers={'Content-Type': 'text/plain'}, verify=False)

What I got

{
"timestamp": "2022-05-16T12:20:56.918+0000",
"status": 400,
"error": "Bad Request",
"errors": [
{
"codes": [
"NotEmpty.systemUserLogin.password",
"NotEmpty.password",
"NotEmpty.java.lang.String",
"NotEmpty"
],
"arguments": [
{
"codes": [
"systemUserLogin.password",
"password"
],
"arguments": null,
"defaultMessage": "password",
"code": "password"
}
],
"defaultMessage": "must not be empty",
"objectName": "systemUserLogin",
"field": "password",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotEmpty"
},
{
"codes": [
"NotNull.systemUserLogin.password",
"NotNull.password",
"NotNull.java.lang.String",
"NotNull"
],
"arguments": [
{
"codes": [
"systemUserLogin.password",
"password"
],
"arguments": null,
"defaultMessage": "password",
"code": "password"
}
],
"defaultMessage": "must not be null",
"objectName": "systemUserLogin",
"field": "password",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotNull"
},
{
"codes": [
"NotNull.systemUserLogin.email",
"NotNull.email",
"NotNull.java.lang.String",
"NotNull"
],
"arguments": [
{
"codes": [
"systemUserLogin.email",
"email"
],
"arguments": null,
"defaultMessage": "email",
"code": "email"
}
],
"defaultMessage": "must not be null",
"objectName": "systemUserLogin",
"field": "email",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotNull"
},
{
"codes": [
"NotEmpty.systemUserLogin.email",
"NotEmpty.email",
"NotEmpty.java.lang.String",
"NotEmpty"
],
"arguments": [
{
"codes": [
"systemUserLogin.email",
"email"
],
"arguments": null,
"defaultMessage": "email",
"code": "email"
}
],
"defaultMessage": "must not be empty",
"objectName": "systemUserLogin",
"field": "email",
"rejectedValue": null,
"bindingFailure": false,
"code": "NotEmpty"
}
],
"message": "Validation failed for object='systemUserLogin'. Error count: 4",
"path": "/employee-service/login"
}

如何完全调试真正发送的?

我发现的是:

l_response.request.body
# email=apitester@xxx.com&password=xxx!xxx

我的结论是我肯定是不是正确发送查询字符串

我做错了什么?

我还试了什么

如果我将url参数设置为https://dev.xxx.com/employee-service/login?email=apitester@xxx.com&password=xxx!xxx,则会出错:许多错误,重试,SSL异常等。

如上所述,这是有效的。

我将关闭这个项目。

l_response = s.post(url=url+'?locationId=110', json=user_json, verify=False, headers={'Content-Type': 'application/json'})

最新更新