2017-08-05 1 views
0

J'ai donc passé un certain temps à essayer d'apprendre à écrire des requêtes httpHTTP demande de création correcte pour un fichier html en python

mon but est de demander le code html d'une analyse syntaxique de page Web et extraire des données à partir de là

im ayant du mal à comprendre comment je peux le faire si je n'ai pas le chemin exact du fichier et tout ce que j'ai est l'URL de base comme www.google.com

de manière im essayant de faire ce que urllib .request fait mais manuellement avec la programmation socket en python

#Playing with Sockets 

import socket 

target_port=80 
target_url ='www.google.com' 

client=socket.socket(socket.AF_INET,socket.SOCK_STREAM) 

client.connect((target_url,target_port)) 


request= "GET https://www.google.com HTTP/1.1\nHost:google.com\n\n" 

message= request.encode() 
client.send(message) 

response=client.recv(4096) 
print(response.decode()) 
+0

Ce que vous entendez par "Je n'ai pas le chemin exact vers le fichier" n'est pas clair. L'URL * est * le chemin exact. –

Répondre

1

Tout d'abord, votre requête HTTP doit utiliser les nouveaux séparateurs de ligne \r\n (valeurs hexadécimales 0x0D et 0x0A). Vous n'utilisez que \n (0x0A). Here's a good stackoverflow question on this. Deuxièmement, le chemin d'accès au fichier de requête est relatif à l'adresse de l'hôte. Ainsi, lorsque vous appelez le client.connect((target_url,target_port)) pour vous connecter au serveur HTTP de l'hôte, il est prêt à accepter votre requête en utilisant un chemin relatif.

En fin de compte, votre demande devrait ressembler à ceci

request= "GET /path/to/file.html HTTP/1.1\r\nHost:google.com\r\n\r\n"

Vous aurez probablement besoin des en-têtes supplémentaires là-dedans aussi. Pour plus d'informations, consultez la section here. Si ce lien ne vous amène pas à la bonne section, je parlais particulièrement de la section HTTP 1.1 Clients. La section Sample HTTP Exchange est également très bien. En fait, vous trouverez probablement toute la page très utile.