2013-06-18 24 views
42

Mam problem z wysłaniem danych do witryny i uzyskaniem odpowiedzi w języku Python. Widziałem podobne pytania, ale żaden z nich nie osiągnął tego, do czego dążę.Jak wysłać żądanie HTTP Get Web Request w języku Python?

Jeśli możesz to przeczytać, można zobaczyć, co próbuję zrobić w Pythonie (jest to w 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); 
      } 
     } 
    } 

w tym kodzie powyżej żądania HTTP jest ustanowiony wysyłania wszystko znaleźć w strumień odpowiedzi w kierunku adresu URL znalezionego w pliku UrlFileName.

Oto moja próba odtworzenia tego w Pythonie:

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 

Nie jestem pewien, czy jestem nawet tworząc wniosek, znacznie mniej w stanie stworzyć Stream Reader odpowiedzi do wysyłania danych. Każda pomoc będzie doceniona! Proszę szczegółowo opisać, ponieważ jestem bardzo nowy w składni Pythona.

+2

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

Odpowiedz

100

Można użyć urllib2

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

Również można użyć 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 

lub requests library

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

Ach, miałem problem z wysłaniem żądania z httplib. Dzięki! – LeChosenOne

+0

Nie ma za co: D –

+1

+1 za korzystanie z żądań –

5

W języku Python można użyć urllib2 (http://docs.python.org/2/library/urllib2.html), aby wykonać całą tę pracę za Ciebie.

prostu wystarczy:

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

wydrukuje odebrany odpowiedzi HTTP.

Do przekazywania parametrów GET/POST można użyć funkcji urllib.urlencode(). Aby uzyskać więcej informacji, można odwołać się do Official Urllib2 Tutorial

+0

Tak jak, mógłbym wpisać "print urllib2.urlopen (url, array of data) .read()"? – LeChosenOne

+0

tak. Wyjściem funkcji read() jest ciąg znaków, który można wydrukować, przypisać do zmiennej, itd. – Sam