2013-06-18 18 views
42

Ho problemi a inviare dati a un sito Web e ottenere una risposta in Python. Ho visto domande simili, ma nessuno di loro sembra realizzare ciò che sto mirando.Come si invia una richiesta HTTP Ottieni Web in Python?

Se potete leggere questo, è possibile vedere quello che sto cercando di fare in Python (Questo è in C#)

static void Request(Uri selectedUri) 
    { 
     HttpWebRequest request = (HttpWebRequest)WebRequest.Create(selectedUri); 
     request.ServicePoint.BindIPEndPointDelegate = BindIPEndPointCallback; 
     request.Method = "GET"; 
     request.Timeout = (int)Timeout.TotalMilliseconds; 
     request.ReadWriteTimeout = (int)Timeout.TotalMilliseconds; 
     request.CachePolicy = CachePolicy; 
     request.UserAgent = UserAgent; 

     using (HttpWebResponse response = (HttpWebResponse)request.GetResponse()) 
     { 
      using (StreamReader responseReader = new StreamReader(response.GetResponseStream())) 
      { 
       string responseText = responseReader.ReadToEnd(); 
       File.WriteAllText(UrlFileName, responseText.Trim(), Encoding.ASCII); 
      } 
     } 
    } 

In questo codice di cui sopra, una richiesta HTTP è stabilito l'invio di tutto si trovano in il flusso di risposta verso l'URL trovato nel UrlFileName.

Ecco il mio tentativo di ricreare questo in Python:

def request(): 
web = httplib.HTTPConnection('https://minecraft.net'); 
headers = {"Content-type": "application/x-www-form-urlencoded", "Accept": "text/plain"} 
web.request("GET", "/heartbeat.jsp", headers); 
response = web.getresponse(); 
stream = ""; #something is wrong here 

non sono sicuro se sto creando anche una richiesta, e tanto meno in grado di creare un lettore di flusso della risposta per inviare i dati. Qualsiasi aiuto sarebbe apprezzato! Si prega di essere dettagliato in quanto sono molto nuovo alla sintassi di Python.

+2

http: // stackoverflow.com/questions/645312/what-is-the-quicke st-way-to-http-get-in-python – monknomo

risposta

100

È possibile utilizzare urllib2

import urllib2 
content = urllib2.urlopen(some_url).read() 
print content 

Inoltre è possibile utilizzare httplib

import httplib 
conn = httplib.HTTPConnection("www.python.org") 
conn.request("HEAD","/index.html") 
res = conn.getresponse() 
print res.status, res.reason 
# Result: 
200 OK 

o requests library

import requests 
r = requests.get('https://api.github.com/user', auth=('user', 'pass')) 
r.status_code 
# Result: 
200 
+1

Ah, un problema che avevo era che dovevo inviare la richiesta con httplib. Grazie! – LeChosenOne

+0

Prego: D –

+1

+1 per utilizzare le richieste –

5

In Python, è possibile utilizzare urllib2 (http://docs.python.org/2/library/urllib2.html) per fare tutto questo lavoro per voi.

abbastanza semplice:

import urllib2 
f = urllib2.urlopen(url) 
print f.read() 

stamperà la risposta HTTP ricevuta.

Per passare i parametri GET/POST è possibile utilizzare la funzione urllib.urlencode(). Per ulteriori informazioni, è possibile consultare la Official Urllib2 Tutorial

+0

Così, potrei digitare "print urllib2.urlopen (url, array of data) .read()"? – LeChosenOne

+0

sì. L'output della funzione read() è una stringa che puoi stampare, assegnare a una variabile, ecc. – Sam

Problemi correlati