【问题标题】:Receiving 500 HTTP response when posting to website发布到网站时收到 500 HTTP 响应
【发布时间】:2014-07-28 18:01:34
【问题描述】:

我正在尝试从需要发布到 ajax 脚本的网站中提取一些信息。

我正在尝试创建一个自动化脚本,但是我始终遇到 HTTP 500 错误。这与我从

url = 'http://www.ise.com/ExchangeDataService.asmx/Get_ISE_Dividend_Volume_Data/'

paramList = ''
paramList += '"' + 'dtStartDate' + '":07/25/2014"'
paramList += ','
paramList += '"' + 'dtEndDate' + '":07/25/2014"';
paramList = '{' + paramList + '}';

response = requests.post(url, headers={
    'Content-Type': 'application/json; charset=UTF-8',
    'data': paramList,
    'dataType':'json'
    })

我想知道是否有人对正在发生的事情有任何建议。这不是专有数据,因为它们允许您以 excel 格式手动下载它。

【问题讨论】:

  • 复制并粘贴您尝试访问的 URL 到浏览器中。如果它有效,那么您的代码有问题。如果不是,请检查您的参数以确保您发送的是服务器所期望的,如果它们正确,请联系站点管理员。
  • @Zuzlx:您无法将带有数据的 POST 请求复制并粘贴到浏览器中。
  • @abarnert 哈!真的。如果您知道如何使用 Fiddler,调试过程仍然存在。
  • @Zuzlx:是的,有一些很好的插件可以做到这一点,任何从事严肃客户端 Web 开发但不知道如何将 Python 与请求(或 Node 等)一起使用的人从像他手背这样的交互式提示中,真的,真的,真的应该使用一个作为第一步,也是调试的第一个地方。

标签: python http web-scraping


【解决方案1】:

您生成的输入不是有效的 JSON。它看起来像这样:

{"dtStartDate":07/25/2014","dtEndDate":07/25/2014"}

如果您仔细观察,您会发现在第一个 07 之前缺少一个 "

这是您不应该尝试通过字符串连接生成 JSON 的众多原因之一。构建dict 并使用json.dump,或者如果必须,使用多行字符串作为str.format% 的模板。


此外,正如 bruno desthuilliers 指出的那样,您几乎肯定希望将 JSON 作为 POST 正文发送,而不是作为空 POST 中的 data 标头发送。以错误的方式执行此操作确实会与某些后端一起使用,但这只是偶然,这当然不是您应该依赖的。如果您正在与之交谈的服务器不是这些后端之一,那么您将空字符串作为您的 JSON 数据发送,这同样是无效的。


那么,为什么这会给您一个 500 错误?可能是因为后端是一些杂乱无章的 PHP 代码,它没有针对无效 JSON 的错误处理程序,所以它只是在没有关于发生了什么问题的信息的情况下退出,所以服务器除了向您发送一个通用的 500 错误之外,没有什么比这更好的了。

【讨论】:

  • json.dump 和删除连接是做什么的
【解决方案2】:

如果这是您实际代码的复制/粘贴,则“数据”可能不应该是请求标头的一部分。附带说明:您不是“发布到 ajax 脚本”,而是发布到 URL。这个 URL 是通过来自站点某些页面上的某些 javascript 的异步请求调用的这一事实完全无关紧要。

【讨论】:

    【解决方案3】:

    这听起来像是服务器错误。因此,由于其格式,您的帖子可能会破坏他们的 api。 或者他们的 api 可能已关闭。

    http://pcsupport.about.com/od/findbyerrormessage/a/500servererror.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-05-05
      • 1970-01-01
      • 2020-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多