2017-01-25 2 views
1

Я пишу скрипт Python для предварительной обработки SVG-файлов. Я называю URL как:Как прервать скрипт Python и вернуть ошибку 404?

http://example.com/includesvg.py?/myfile.svg 

Я хотел бы сценарий «includesvg.py» возвращать ошибку 404 если myfile.svg не существует. Я пробовал:

print "Status: 404 Not Found\r\n" 
print "Content-Type: text/html\r\n\r\n" 
print "<h1>404 File not found!</h1>" 

Это не работает.

Это должен быть дублирующий вопрос, но есть так много вопросов с «Python» и «404», что я не могу найти существующий ответ.

+0

Ehm, это даже не действительный HTTP-заголовок. Поле 'Status' отсутствует, а статус статуса работает иначе. – linusg

+0

Я знаю, что это не допустимый HTTP-заголовок, поэтому я задаю вопрос. –

+0

Да, я понял. См. Мой ответ ниже. В любом случае, есть статья Wikipedia для всех допустимых полей заголовка HTTP, вы можете добавить еще несколько. – linusg

ответ

0

Ответ HTTP, который вы отправляете, недействителен. Я бы с этим:

print('HTTP/1.1 404 Not Found\r\n') 
print('Content-Type: text/html\r\n\r\n') 
print('<html><head></head><body><h1>404 Not Found</h1></body></html>') 

Результирующее в (prettified):

HTTP/1.1 404 Not Found 
Content-Type: text/html 

<html> 
    <head> 
    </head> 
    <body> 
    <h1>404 Not Found</h1> 
    </body> 
</html> 

Однако, это можно было бы также работать:

import sys 
sys.stdout('Status: 404 Not Found\r\n\r\n') 

В упрощенной версии:

print('Status: 404 Not Found') 
print() 

Надеюсь, это поможет!

+0

Если я сначала печатаю «\ n», я просто получаю текст с статусом 200 (я проверил по адресу http://www.rexswain.com/cgi-bin/httpview.cgi). Если я не укажу «\ n», я получаю ошибку сервера. –

+0

Хорошо, я отредактировал. Я предполагаю, что это проблема с встроенным 'print', добавляющим новые строки по своему усмотрению. – linusg

+0

Такая же проблема ... если я не добавлю новую строку до того, как я получу 500-серверную ошибку, и если я это сделаю, статус будет автоматически установлен на 200. Любое усилие на печать чего-либо без предшествующей новой строки вызывает ошибку сервера. Я буду смотреть в своих журналах, что такое точная ошибка. –

Смежные вопросы