【问题标题】:requests <Response [500]>请求 <响应 [500]>
【发布时间】:2016-07-21 22:23:46
【问题描述】:

我希望使用 requests 类从 Web 获取数据,然后将更改发布到命名空间 XML 并重新加载。

我可以通过以下方式登录并使用请求获取数据:

data_req = requests.get(proj_data_url, headers=headers, auth=(_user, _pw))

标题是{'X-ApiKey': A-ApiKey, 'Authorization': Authorization}

data_req&lt;Response [200]&gt;

然后我用

data_tree = xml.etree.ElementTree.fromstring(data_req.content)

转换成data_tree并成功修改

然后我用

data_set = xml.etree.ElementTree.tostring(data_tree)

转换回字符串。

然后我尝试通过以下方式发布更改备份:

_response = requests.post(proj_data_url, data=data_set, headers=headers, auth=(_user, _pw))

但收到_response = &lt;Response [500]&gt;,这显然是服务器错误。

谁能帮忙?

【问题讨论】:

  • 一个快速的后续问题:
  • fromstring() 返回一个 Element 实例。 tostring() 是否为要发布的元素创建正确的 XML 字符串表示形式?这不需要是 XML Tree 实例的字符串表示形式吗?

标签: xml python-requests


【解决方案1】:

所以在不知道服务器或您发布的 XML 的情况下,任何人都无法帮助解决服务器错误。

500 表示您正在与之交谈的应用程序没有处理内部错误。例如,如果应用程序是用 Python 编写的,那么 500 可能是代码中未处理的异常的结果。

如果没有更多详细信息,您应该尝试联系网站管理员寻求帮助。他们可以检查他们的日志,修复他们的应用程序,并告诉您如何正确地向他们的服务发送请求。

您可能会尝试做的一件事是为您的 POST 请求设置内容类型。您可以通过像这样更新headers 来做到这一点

headers['Content-Type'] = 'text/xml'  # or 'application/xml'

(请参阅this answer 以确定您应该发送哪个。)

【讨论】:

  • 运行您的建议时,我都会收到 400 响应。我明天要联系网站管理员,并会跟进。 headers['Content-Type'] = 'text/xml' #or 'application/xml' _response = requests.post(proj_data_url, data=data_set, headers=headers, auth=(_user, _pw))
  • 我已经确认正确的 'Content-Type' 被发布为 'application/xml' 并且 tostring() 编码正确为 'UTF-8'。
  • 所以 400 比 500 好,只是因为这意味着你所做的一切都是错误的,并且不会导致服务器崩溃。但是,如果没有更多详细信息,我无法帮助您找出您的请求什么有问题,因此您应该继续与网站管理员交谈。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-04
  • 1970-01-01
  • 1970-01-01
  • 2022-07-25
  • 2019-07-26
  • 1970-01-01
相关资源
最近更新 更多