Comment envoyer de la réponse HTTP avec Python à l'aide de prise à la bibliothèque?
J'ai une question très simple serveur web écrit en Python. Il écoute sur le port 13000, comment puis-je faire livrer un simple "Hello World" page web si http://localhost:13000
est ouvert dans le navigateur?
Droite il y a mon code:
# set up socket and connection
while True:
sock, addr = servSock.accept()
# WHAT GOES HERE?
sock.close()
Comme vous pouvez le voir, je ne suis pas sûr de savoir exactement comment envoyer la page web?
Je n'ai qu'à utiliser le socket
bibliothèque.
EDIT: Le problème n'est pas que je ne sais pas comment formuler la réponse HTTP, je ne sais pas comment le faire afficher dans mon navigateur! Il continue de tourner et le chargement.
Vous devez vous connecter pour publier un commentaire.
Mis à jour en fonction à la question du changement
Éventuellement, il continue de tourner à cause d'une combinaison de absense de
Content-Length
etConnection
en-têtes, le navigateur peut présumer qu'il estConnection: keep-alive
, alors qu'il continue de recevoir des données à partir de votre serveur pour toujours. Essayez d'envoyerConnection: close
, et passer réelleContent-Length
pour voir si cela aide.Ne pas ce faire ce que vous attendez? 🙂
Pour une description plus détaillée, veuillez consulter description du protocole HTTP.
Renvoyer quelque chose comme:
Le code html. Assurez-vous qu'il est un saut de ligne après le Type de Contenu de la ligne et avant le html.
ou, si vous ne voulez pas de se rappeler le protocole complet, vous pouvez le retrouver en utilisant :
bien, vous ne préfèrent généralement un site qui est moins verbeux (généralement d'un fichier statique) que stackoverflow 😉
Les exigences minimales (vous trouverez sur la réponse) est :
deux rendements sont obligatoires pour le serveur pour obtenir la réponse, sinon le navigateur attend indéfiniment, pour les en-têtes
Mais pour imiter le comportement d'un serveur web, n'oubliez pas d'envoyer votre réponse seulement après que le navigateur vous envoie quelques données, suivies par deux retours chariot, vous pouvez généralement obtenir ce qu'il envoie à l'aide de :
de sorte que vous pouvez améliorer vos routines de test
Vous pourriez voulez extraire des objets web http://www.webob.org/
C'est un simple léger de projet pour la création de http compatibles les demandes et les réponses. Vous pouvez faire à peu près n'importe quoi avec vous les demandes et la réponse des objets ... Ou simplement déléguer le levage lourd pour WebObjects
Échantillon
J'ai pris un à la réponse précédente et modifié le code pour Python3 utf-8 et d'octets codage. Merci pour la réponse originale à cette question, il a aidé beaucoup.