Получение ошибки «конец вывода скрипта перед заголовками», даже если скрипт работает

#python #html #xampp

#python #HTML #xampp

Вопрос:

Я создал простую HTML-страницу для публикации в Python script

 <!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>
  

the ver1.py выглядит так:

 #!C:Pythonpython.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 также открывается вторая вкладка с

конец вывода скрипта перед заголовками

ошибка

при просмотре журнала ошибок из apache единственная строка там следующая:

[Пт 11 сентября 00:46:21.231868 2020] [cgi: ошибка] [pid 11624: tid 1896] [клиент:: 1:54144] Конец вывода скрипта перед заголовками: ver1.py , реферер: http://localhost/decoder.html

Комментарии:

1. всегда помещайте полное сообщение об ошибке (начинающееся со слова «Трассировка») в вопрос (не комментарий) в виде текста (не скриншота). Есть и другая полезная информация.

2. каждая страница / URL / запрос должна отправлять ответ в браузер, но вы ничего не отправляете. Вы не отправляете даже заголовки. И это может быть вашей проблемой.

3. @furas обратной трассировки нет, это единственная строка, которая генерируется после ввода значения в поле

4. на клиент-сервере, когда браузер отправляет запрос (пытается подключиться url ), сервер должен отправить ответ со страницей или, по крайней мере, с заголовками. И ver1.py также следует отправить некоторый ответ браузеру — это может быть даже пустая страница, но у нее будут заголовки с информацией для браузера о том, что страница / URL была доступна без проблем (код состояния 200). Или он должен отправить ответ с информацией для перенаправления обратно на страницу с формой.

5. Как бы мне отправить ответ с информацией для перенаправления обратно на страницу с формой?

Ответ №1:

Как указал @furas, это было потому, что я не отправлял никакого ответа обратно в браузер.

Я внес нижеприведенные изменения, и вместо 3 вкладок у меня теперь есть одна HTML-страница, а PDF-файл открывается в окне, в котором раньше была ошибка:

 #!C:Pythonpython.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/htmlnn')
print('<html>')
print('  <head>')
print('    <meta http-equiv="refresh" content="0;url=' str(window_stkr) '" />') 
print('  </head>')
print('</html>')