【问题标题】:Why am I getting 500 Internal Server Error when calling post rest api via python request?为什么通过 python 请求调用 post rest api 时出现 500 内部服务器错误?
【发布时间】:2019-03-17 17:06:32
【问题描述】:

我正在尝试使用 python 请求库调用 post rest API。当我请求使用邮递员时,我能够得到正确的响应。当我尝试使用 python 请求库调用它时,出现内部服务器错误。

import requests

url = "http://192.188.9.146:9886/getcontext/"

payload = "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"project\"\r\n\r\ndaynight\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"file\"; filename=\"D:\\Downloads\\GTA.Imaging.Services\\GTA.Imaging.Services.Wrapper.TestApp\\PatternMatchingdata\\Go_To_Setting_Screen.jpg\"\r\nContent-Type: image/jpeg\r\n\r\n\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--"
headers = {
    'content-type': "multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW",
    'cache-control': "no-cache",
    'Postman-Token': "79668e4b-305b-404e-904f-92fc71a12f9f"
    }

response = requests.request("POST", url, data=payload, headers=headers)

print(response.text)

这给了我如下错误

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2 Final//EN">
<title>500 Internal Server Error</title>
<h1>Internal Server Error</h1>
<p>The server encountered an internal error and was unable to complete your request.  Either the server is overloaded or there is an error in the application.</p>

当我使用邮递员客户端应用程序时,我得到了预期响应的输出 Postman client 我究竟做错了什么? 任何指导都会非常有帮助,谢谢。

【问题讨论】:

  • 使用wireshark从postman和python中抓取出站TCP数据,并进行比较。另外,您是否需要将“项目”和“文件”属性放入不同的表单部分?他们可能会一起出现吗?
  • 嗨,你能分享一些用 Wireshark 完成的例子吗?是的,我需要将两个属性放在一起。像这样的
  • 多部分请求是requests 模块的内置功能。不要自己滚。阅读如何使用它:docs.python-requests.org/en/master/user/quickstart/…
  • 如果 192.188.9.146:9886/getcontext 是内部应用程序 - 检查服务器日志。
  • 是的,它在本地服务器上运行,由烧瓶组成

标签: python python-3.x rest api post


【解决方案1】:

删除payload 参数并添加files。请参阅requests documentation,其中解释了 requests.request 函数的此选项。

import requests

url = "http://192.188.9.146:9886/getcontext/"

files = {'file': open('PATH_TO_FILE\Go_To_Setting_Screen.jpg','rb')}
data  = {'project': 'daynight'}

response = requests.request("POST", url, files = files, data = data)

print(response.text)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-19
    • 1970-01-01
    • 1970-01-01
    • 2017-11-25
    相关资源
    最近更新 更多