API POST请求适用于PowerShell,但不适用于Python
我有一个本地API,我想用非常基本的POST请求来测试它。PowerShell测试脚本工作得非常好,但Python测试脚本(应该以同样的方式工作)却不能API POST请求适用于PowerShell,但不适用于Python,python,json,python-requests,Python,Json,Python Requests,我有一个本地API,我想用非常基本的POST请求来测试它。PowerShell测试脚本工作得非常好,但Python测试脚本(应该以同样的方式工作)却不能 PowerShell:api\u post.ps1 Pythonapi_post.py API返回的错误没有意义,因为API仍处于早期测试阶段 注意:我没有在这里标记PowerShell,因为PowerShell示例仅显示POST通常可以工作请求。POST的数据参数不带字符串,您应该直接将dict传递给它:) 请参阅在不使用json.dum
PowerShell:
api\u post.ps1
Pythonapi_post.py
API返回的错误没有意义,因为API仍处于早期测试阶段
注意:我没有在这里标记PowerShell,因为PowerShell示例仅显示POST通常可以工作
请求。POST
的数据
参数不带字符串,您应该直接将dict传递给它:)
请参阅在不使用
json.dumps的情况下尝试,即data=PAYLOAD
感谢您的快速回复。不幸的是,如果我直接传递数据,就会出现错误<代码>值错误:太多的值无法解包(预期为2)
@Razorfen噢,这是因为我相信您的负载是一个列表。可能尝试data=PAYLOAD[0]
?我尝试了-结果与我最初得到的错误相同。我猜这是因为API需要以数组/列表的形式提供有效负载。我的PowerShell脚本直到我使用上面类似的ConvertTo Json
创建Json ArrayId才成功,您是否尝试Json=payload?在Python中使用json可以使用列表。此外,如果您这样做,则不需要指定标头。另请参见此处:
$url = "http://test.local/"
$headers = @{"Content-Type" = "application/json"}
$payload = @(
@{
"Order_Number" = "123-vfs"
"SKU" = 123
"Company" = "Test Ltd"
}
)
$payload = ConvertTo-Json -InputObject $payload
# Works exactly as it should
Invoke-RestMethod -Uri $url -Method "POST" -Headers $headers -Body $payload
import json
import requests
URL = "http://test.local/"
HEADERS = {
"Content-Type": "application/json"
}
PAYLOAD = [
{
"Order_Number": "123-vfs",
"SKU": 123,
"Company": "Test Ltd",
}
]
# Returns an error
requests.post(URL, headers=HEADERS, data=json.dumps(PAYLOAD))
requests.post(URL, headers=HEADERS, data=PAYLOAD[0])