2009-10-29 7 views
4

Comment puis-je déclencher une erreur/exception http à partir d'un script CGI python?Comment puis-je déclencher une erreur/exception http à partir d'un script CGI python?

Est-ce tout ce qui est nécessaire est d'imprimer l'en-tête approprié:

print '''Status: 501 Not Implemented 
Content-type: text/html 

''' 

Cela ne semble pas fonctionner à droite.

J'ai une configuration très basique, à savoir le routage IIS7 * .py scripts CGI à python25.exe pour l'exécution. Je n'utilise aucun WSGI ou FastCGI. Utilisation des modules CGI "normaux": cgitb et cgi

+0

Je pense qu'il pourrait aider à fournir à votre configuration. Quel serveur web utilisez-vous et quels modules utilisez-vous? Utilisez-vous FastCGI? Quelle bibliothèque fournit l'accès aux variables d'environnement CGI et autres? Ne fournit-il pas également des méthodes pour gérer les transactions HTTP? – EMPraptor

+0

J'ai mis à jour la question pour montrer que j'utilise simplement les modules cgi et cgitb pour Python avec IIS7. Rien de spécial. –

Répondre

3

Il semble que ce soit la façon de procéder. Tant que vous suivez correctement le format d'en-tête.

Voici quelqu'un d'autre qui a posé la même question, plus ou moins.

Returning http status codes in Python CGI

Suivez-vous les spécifications HTTP lorsque vous imprimez le code d'état? Pouvez-vous essayer d'imprimer uniquement le code d'état et non sa description?

... Peut-être comme

print '''Status:501 
Content-type: text/html 

''' 

Ou il devrait être comme ...

print '''HTTP/1.1 501 Not Implemented 
Content-type: text/html 

''' 

Pouvez-vous tester votre configuration pour vérifier?

état de retour CGI:

http://oreilly.com/openbook/cgi/ch03_07.html

je suppose « Statut: 501 Non implémenté » comme vous l'aviez est le chemin à parcourir à l'origine. Je ne sais pas pourquoi ça ne marche pas. Imprimez-vous du contenu autre que l'en-tête avant d'imprimer le code d'état?

Encore une autre source qui confirme que vous le faites à droite (regardez dans la section 6.3.3.):

http://www.ietf.org/rfc/rfc3875

EDIT 1,2,3: réponse prolongée

0

Python CGI returning an http status code, such as 403?

Une réponse il a suggéré:

sys.stdout ('S tatus: 403 Interdite \ r \ n \ r \ n ')

peut être techniquement plus correct, selon RFC (en supposant que votre script CGI ne fonctionne pas en mode texte sous Windows). Cependant, les deux terminaisons de ligne semblent fonctionner partout.

Mais puisque vous faites cela sur Windows et vous ne terminez pas l'en-tête avec la ligne d'état ...

sys.stdout('Status: 501 Not Implemented\n') 

Je ne vois pas pourquoi l'utilisation de sys.stdout serait importante car l'impression devrait utiliser stdout.

2

Démarrez votre script avec: cgitb.enable() ensuite à la sortie un code d'erreur correct lors d'une utilisation d'exception:

try: 
    blah blah failed code 
except: 
    print "Status: 500" 
    cgitb.handler() 
Questions connexes