即使脚本有效,也会收到“标题前脚本输出结束”错误

Posted

技术标签:

【中文标题】即使脚本有效,也会收到“标题前脚本输出结束”错误【英文标题】:Receiving "end of script output before headers" error even though script works 【发布时间】:2020-12-29 09:56:30 【问题描述】:

我创建了一个简单的 html 页面来发布到 python 脚本

<!DOCTYPE html>
<html>
<body>

<h1>Name</h1>

<form action="/cgi-bin/ver1.py" method="get">
  <label for="fname">VIN</label>
  <input type="text" id="fname" name="searchbox"><br><br>
  <button type="submit" formtarget="_blank">Submit to a new window/tab</button>
</form>


</body>
</html>

ver1.py 看起来像这样:

#!C:\Python\python.exe


import requests
import webbrowser
import cgi
form = cgi.FieldStorage()
 

vin=form.getvalue('searchbox')
token='withheld'

dr=requests.get("withheld" % (token, vin))




window_stkr=(dr.json()["car"]["sticker"]["pdf"])
webbrowser.open_new_tab(window_stkr)

一切正常,除了使用window_stkr打开一个新选项卡的部分之外,它还使用window_stkr打开第二个选项卡

在标题之前结束脚本输出

错误

查看 apache 的错误日志时,只有以下一行:

[2020 年 9 月 11 日星期五 00:46:21.231868] [cgi:error] [pid 11624:tid 1896] [客户端 ::1:54144] 标头之前的脚本输出结束:ver1.py, 引用者:http://localhost/decoder.html

【问题讨论】:

总是将完整的错误消息(从单词“Traceback”开始)作为文本(不是屏幕截图)放在有问题的(不是评论)中。还有其他有用的信息。 每个页面/url/请求都应该向浏览器发送响应——但你什么也不发送。你甚至不发送标题。这可能是您的问题。 @furas 没有回溯,这是我在框中输入值后生成的唯一行 当浏览器发送请求时(尝试与url连接)在客户端服务器中,然后服务器必须发送带有页面或至少带有标题的响应。并且ver1.py 也应该向浏览器发送一些响应——它甚至可以是空页面,但它会包含带有浏览器信息的标题,该页面/url 被毫无问题地访问(状态代码 200)。或者它应该发送带有信息的响应以重定向回带有表单的页面。 我将如何发送带有信息的响应以重定向回带有表单的页面? 【参考方案1】:

正如@furas 指出的那样,这是因为我没有向浏览器发送任何响应。

我进行了以下更改,而不是 3 个选项卡,我现在有一个 html 页面,并且 pdf 在曾经出现错误的窗口中打开:

#!C:\Python\python.exe


import requests
import webbrowser
import cgi
form = cgi.FieldStorage()
 

vin=form.getvalue('searchbox')
token='withheld'

dr=requests.get("withheld" % (token, vin))




window_stkr=(dr.json()["car"]["sticker"]["pdf"])
#webbrowser.open_new_tab(window_stkr)
print('Content-type:text/html\n\n')
print('<html>')
print('  <head>')
print('    <meta http-equiv="refresh" content="0;url='+str(window_stkr)+'" />') 
print('  </head>')
print('</html>')

【讨论】:

以上是关于即使脚本有效,也会收到“标题前脚本输出结束”错误的主要内容,如果未能解决你的问题,请参考以下文章

即使路径正确,shell 脚本 cd 也会失败

为啥即使实现了 Iterable,我也会收到 foreach 编译器错误?

即使电子邮件有效,电子邮件检查也会给出错误消息

即使我设置了 CORS 原点,也会不断收到 CORS 错误

即使我只有一个参数,我也会收到“包装承诺不可迭代错误”

即使在添加 ojdbc14.jar 文件后,我也会收到 HTTP 错误 500