La création d'une crue de la requête HTTP avec les sockets
Je voudrais être en mesure de construire une crue de la requête HTTP et de l'envoyer avec un socket. Évidemment, vous voulez me servir de quelque chose comme urllib et urllib2 mais je ne veux pas l'utiliser.
Il devrait ressembler à quelque chose comme ceci:
import socket
tcpsoc = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpsoc.bind(('72.14.192.58', 80)) #bind to googles ip
tcpsoc.send('HTTP REQUEST')
response = tcpsoc.recv()
Évidemment, vous auriez également à la demande de la page/fichier et les paramètres get et post
Eh bien, en principe, il est tout à fait facile, vous envoyer 'OBTENIR someurl HTTP/1.1" suivi de "l'Hôte: theserversname", suivi par deux retours à la ligne. Ce qui le rend complexe est qu'il y a un million d'options et un million de réponses possibles que vous devez analyser (c'est pourquoi l'une serait useually dire "utiliser une bibliothèque").
vous avez besoin tcpsoc.se connecter à la place de bind. bind est pour les sockets d'écoute...
voici un exemple de connexion: docs.python.org/library/socket.html#example
parfois, nous aimons à réinventer la roue pour avoir une idée de comment le faire mieux.
Ou pour savoir comment la roue fonctionne
vous avez besoin tcpsoc.se connecter à la place de bind. bind est pour les sockets d'écoute...
voici un exemple de connexion: docs.python.org/library/socket.html#example
parfois, nous aimons à réinventer la roue pour avoir une idée de comment le faire mieux.
Ou pour savoir comment la roue fonctionne
OriginalL'auteur Jacob Valenta | 2011-04-22
Vous devez vous connecter pour publier un commentaire.
La plupart de ce que vous devez savoir est dans le HTTP/1.1 spec, que vous devriez certainement étudier si vous souhaitez annuler votre propre implémentation de HTTP: http://www.w3.org/Protocols/rfc2616/rfc2616.html
OriginalL'auteur Kristopher Johnson
OriginalL'auteur Ricky Wilson
Oui, fondamentalement, vous avez juste à écrire le texte, quelque chose comme :
N'hésitez pas à retirer /ajouter des en-têtes.
Raw request
,Raw message
ou d'une autre?Si c'est toujours d'actualité, le texte complet est appelé en-tête HTTP. En option, il est suivi par le contenu réel, séparés par une ligne vide. C'est le cas, lorsque vous envoyez une réponse au client de télécharger les données vers le serveur.
Merci pour votre réponse!
CRLF est remplacée par un tel saut de ligne ou faut-il littéralement être inclus?
OriginalL'auteur Hubert Applebaum
Pour un exemple pour vous guider, vous voudrez peut-être jeter un oeil à libcurl, une bibliothèque écrite en langage C:
fait ce que vous voulez et bien plus encore;
est un jeu d'enfant à utiliser;
est largement déployée; et
est activement soutenue.
C'est une belle chose et l'un des meilleurs exemples de ce que l'open source peut et doit être.
OriginalL'auteur Pete Wilson