2013-06-18 27 views
42

Tôi gặp sự cố khi gửi dữ liệu đến một trang web và nhận được phản hồi bằng Python. Tôi đã nhìn thấy những câu hỏi tương tự, nhưng không ai trong số họ dường như hoàn thành những gì tôi đang hướng tới.Làm thế nào để bạn gửi một HTTP Get Web Request bằng Python?

Nếu bạn có thể đọc này, bạn có thể thấy những gì tôi đang cố gắng để làm bằng Python (Đây là nó trong 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); 
      } 
     } 
    } 

Trong mã này ở trên, một yêu cầu Http được thành lập gửi tất cả mọi thứ được tìm thấy trong luồng phản hồi về phía url được tìm thấy trong UrlFileName.

Đây là nỗ lực của tôi lúc tái tạo này bằng 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 

Tôi không chắc chắn nếu tôi thậm chí tạo ra một yêu cầu, ít hơn nhiều có thể tạo ra một Stream đọc của phản ứng để gửi dữ liệu. Bất kỳ trợ giúp sẽ được đánh giá cao! Xin được chi tiết như tôi rất mới với cú pháp Python.

+2

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

Trả lời

100

Bạn có thể sử dụng urllib2

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

Ngoài ra bạn có thể sử dụng 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 

hoặc requests library

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

Ah, một vấn đề mà tôi có là tôi cần gửi yêu cầu với httplib. Cảm ơn! – LeChosenOne

+0

Bạn được chào đón: D –

+1

+1 để sử dụng các yêu cầu –

5

Trong Python, bạn có thể sử dụng urllib2 (http://docs.python.org/2/library/urllib2.html) để thực hiện tất cả công việc đó cho bạn.

Đơn giản chỉ cần đủ:

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

Sẽ in cả phần đáp ứng HTTP nhận được.

Để chuyển các tham số GET/POST, có thể sử dụng chức năng urllib.urlencode(). Để biết thêm thông tin, bạn có thể tham khảo các Official Urllib2 Tutorial

+0

Vì vậy, như thế, tôi có thể gõ "in urllib2.urlopen (url, mảng dữ liệu) .read()"? – LeChosenOne

+0

có. Đầu ra của hàm read() là một chuỗi mà bạn có thể in, gán cho một biến, vv – Sam

Các vấn đề liên quan