【问题标题】:Premature end of script headers in python script bluehostpython脚本bluehost中脚本头的过早结束
【发布时间】:2014-12-01 01:00:02
【问题描述】:

我在 Bluehost 上托管一个网站,我正在尝试使用 AJAX 在单击按钮时执行 python 脚本。但是,每次我单击按钮时,服务器都会向 python 脚本响应 500 错误。更具体地说,这是错误:

[Sun Nov 30 17:49:26 2014] [error] [client 174.61.70.33] 过早结束 脚本头:Steap.py,引用者:http://steap.co/

这是 AJAX 代码:

$(document).ready(function(){
            $("#steambutton").click(function() {
                DisplayLoadingDiv();
                $.ajax({
                    type: "POST",
                    url: "http://steap.co/cgi-bin/Steap.py",
                    data: {steamid: "<?php echo $steamprofile['steamid']?>"},
                    success: function(response) {
                        $("#steamdiv").html(response);  
                        $("#phisherbutton").show()
                    },
                    error: function(response) {
                        $("#steamdiv").html("An error occured. Please try again.");
                    }
                });
            });
});

基本上,div在执行0.01秒后显示"An error occured. Please try again.",控制台显示服务器在尝试加载python脚本资源时响应500错误。

Steap.py

http://pastebin.com/F9THyt3u

关于为什么会发生这种情况的任何想法?

【问题讨论】:

  • 所以...steap.co 是您的服务器,对吧?您在该服务器日志中看到任何错误吗?
  • steap.co 是网站,而不是服务器。这是服务器日志中的错误:[Sun Nov 30 17:49:26 2014] [error] [client 174.61.70.33] Premature end of script headers: Steap.py, referer: http://steap.co/
  • Potato, poteito... :-D 那么Steap.py到底在哪里运行呢?我的意思是......我看不出这里的一切是如何连接的......你正在向steap.co发送一个POST,它运行......谁知道在哪里......这给了你一个HTTP 500。 .. Steap.py 在哪里发挥作用。
  • 啊,我想我明白了……
  • Steap.py 在我的站点目录的 cgi-bin 文件夹中。我只是向那个 cgi-bin 文件夹中的Steap.py 资源发出一个帖子请求。

标签: python ajax http-headers cgi bluehost


【解决方案1】:

我很确定问题在于,您没有在 Steap.py 中正确形成 HTTP 响应。特别重要的是HTTP/1.1 200 OK\n 部分(Status Line

我在我的计算机中设置了一个原始 TCP 套接字实现(使用 SocketServer),它通过执行以下操作在我的网络浏览器中正确呈现页面:

    import datetime
    body=("<html><title>Hello</title>"
          "<body>"
          "<div id=\"div-name\">"
          "%s"
          "</br></br>"
          "</div>"
          "</body>"
          "</html>" % foo(bar))

    reply=("HTTP/1.1 200 OK\n"
           "Date: %s\n"
           "Content-Type: text/html\n"
           "Content-Length: %s\n"
           "Connection: close\n"
           "\n"
           "%s" 
           % (datetime.datetime.utcnow().isoformat(' '),
              len(body),
              body)
    )
    print reply

这看起来很好地显示在 Chrome 中:

不用说,这是我的foo(bar)函数:

def foo(bar):
    return "Test test"

说了这么多,我真的,真的会研究如何在你的Bluehost“区域”(或者不管你想叫它)。我倾向于 Tornado(它的用法非常基本,但它会很有帮助,所以你不必自己“手动”编写标题和正文)

【讨论】:

  • 我仍然遇到同样的错误。我将代码更改为:pastebin.com/DDVuUWT7
  • 由于您print 似乎是发送到您的浏览器的响应,我将删除(或评论)print "Content-type: text/html\r\n\r\n" 行(第 21 行)。这可能会被您的浏览器解释为“孤立”标头?
  • 如果这不起作用,您可能需要编辑您的问题并添加更多 Steap.py 的内容?
  • 我仍然遇到同样的错误。我将编辑我的问题以显示Steap.py 的全部内容
  • 我无法确定我要说的是否是您的错误的根源,但您正在添加 + 以连接 body 和 @ 的不同部分987654338@。与%s 结合使用时会出现错误(每个"" + "" 将创建2 个不同的字符串,因此"%s" + "%s" % ('whatever', 'whatever') 会抛出异常(将尝试将两个whatevers 放入最后一个"%s" 字符串,第一个 "%s" 没有)
猜你喜欢
  • 2015-02-04
  • 2013-01-16
  • 2014-06-03
  • 2012-09-23
  • 1970-01-01
  • 1970-01-01
  • 2012-12-03
  • 2011-11-01
  • 2012-06-25
相关资源
最近更新 更多