2010-08-13 16 views
3
conn = httplib.HTTPConnection('thesite') 
conn.request("GET","myurl") 
conn.putheader('Connection','Keep-Alive') 
#conn.putheader('User-Agent','Mozilla/5.0(Windows; u; windows NT 6.1;en-US) AppleWebKit/533.4 (KHTML, like Gecko) Chrome//5.0.375.126 Safari//5.33.4') 
#conn.putheader('Accept-Encoding','gzip,deflate,sdch') 
#conn.putheader('Accept-Language','en-US,en;q=0.8') 
#conn.putheader('Accept-Charset','ISO-8859-1,utf-8;1=0.7,*;q=0.3') 
conn.endheaders() 
r1= conn.getresponse() 

Il soulève une erreur:python: httplib erreur: ne peut pas envoyer les en-têtes

conn.putheader('Connection','Keep-Alive') 
    File "D:\Program Files\python\lib\httplib.py", line 891, in putheader 
    raise CannotSendHeader() 

Si je commente sur putheader et endheaders, il fonctionne très bien. Mais j'en ai besoin pour rester en vie.

Est-ce que quelqu'un sait ce que j'ai fait de mal?

Répondre

7

Utilisez putrequest au lieu de request. Puisque request peut également envoyer des en-têtes, il enverra une ligne vide au serveur pour indiquer la fin des en-têtes, ainsi l'envoi des en-têtes par la suite créera une erreur.

Sinon, vous pouvez le faire comme cela se fait here:

import httplib, urllib 
params = urllib.urlencode({'spam': 1, 'eggs': 2, 'bacon': 0}) 
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} 
conn = httplib.HTTPConnection("musi-cal.mojam.com:80") 
conn.request("POST", "/cgi-bin/query", params, headers) 
response = conn.getresponse() 
+0

grâce. cela fonctionne mais quel est le problème avec mon code original? – Grey

+2

qu'est-ce qui ne va pas, c'est que vous avez utilisé 'request' au lieu de' putrequest', ce qui complète la requête entière. Vous devez ajouter des en-têtes avant de laisser passer la requête, et c'est ce que fait 'putrequest'. – SingleNegationElimination

+0

merci l'homme .. – Grey

-1

têtes = { "Content-Type": "application/x-www-form-urlencoded", "Connexion": "Keep- Alive ", " Referer ":" http://www.tu.sitio.cl/ ", " Utilisateur-Agent ":" Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, comme Gecko) Chrome/51.0.2704.103 Safari/537.36 "};

Code +

conn.request (method = "POST", url = "/ formulario /", body = params, headers = têtes)

+0

Salut, bienvenue à Stack Overflow! Pouvez-vous s'il vous plaît annoter votre réponse mieux? – cdomination