Parser http

Contenu du snippet

#!/usr/bin/python
 
import sys,time 
from socket import * 
 
if len(sys.argv)!= 4: #Test les argument .. 
    print '\nUSAGE :<ip> <port> <fichier>' 
    sys.exit(0) 
 
def read_all(s): #lit toute la requette
    tmp=''
    read=''
    i=1
    while i:
        try:
            tmp=s.recv(1024)
            if len(tmp) ==0:
                break
            else:
                read+=tmp
        except:
            break
    if len(read) ==0:
        return 1
    else:
        return read 
def read_header(h): #Lit l'header
    tmp=''
    for i in xrange(len(h)):
        if h[i] == '\r' and h[i+1]=='\n' and h[i+2] =='\r' and h[i+3]=='\n': #Fin de l'header
            break #on arrete la boucle
        else: 
            tmp+=h[i]
    return tmp #return l'header
def read_code(h): #lit tou ce qui ce trouve après l'header http
    tmp=''
    i=len(read_header(h))+4 #la taille de l'header sans les \r\n\r\n
    while (i<len(h)): #boucle de la fin de l'header a taille de la requette
        tmp+=h[i]
        i+=1
    return tmp #return le reste
     
#DEF VARIABLE .. 
ip = sys.argv[1]       
port = int(sys.argv[2]) 
fichier=sys.argv[3]     
SOCKET_TIMEOUT=1; 
 
 
#print '<ip>=%s'%ip 
#print '<port>=%s'%port 
#print '<fichier>=%s\n'%fichier 
 
 
try: 
    s = socket(AF_INET, SOCK_STREAM)    # Cree les socket ... 
    s.settimeout(SOCKET_TIMEOUT) 
except: 
    print 'Erreur creating socket ...' 
    sys.exit(0) 
     
try: 
    s.connect((ip,port)) # Connection .. 
except: 
        print 'Erreur connecting ...' 
        sys.exit(0) 
         
#Envoye des donne ... 
send='GET %s HTTP/1.1\r\nHost: %s\r\n\r\n'%(fichier,ip) 
 
s.send(send)    
read=read_all(s)
if read != 1:
    #print '%s'%(read_header(read)) #Affiche l'header http
    print '%s'%(read_code(read)) #Affiche code html ou autre .. après l'header http
else:
    print 'Erreur lecture ..'
 
 
s.close() 


Compatibilité : Python

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.