2011-10-19 41 views
7

Tôi đang gặp sự cố khi hiểu cách phát hành yêu cầu HTTP POST bằng cách sử dụng curl từ bên trong python.Http POST Curl trong python

Tôi đang cố gắng đăng lên biểu đồ mở facebook. Đây là ví dụ mà họ đưa ra mà tôi muốn nhân rộng chính xác trong python.

curl -F 'access_token=...' \ 
    -F 'message=Hello, Arjun. I like this new API.' \ 
    https://graph.facebook.com/arjun/feed 

Có ai giúp tôi hiểu điều này không?

Trả lời

14

Bạn có thể sử dụng httplib POST với Python hoặc cấp cao hơn urllib2

import urllib 

params = {} 

params['access_token'] = '*****' 
params['message'] = 'Hello, Arjun. I like this new API.' 

params = urllib.urlencode(params) 
f = urllib.urlopen("https://graph.facebook.com/arjun/feed", params) 
print f.read() 

Ngoài ra còn có một thư viện cụ thể mức độ cao hơn Facebook cho Python mà làm tất cả POST-ing cho bạn.

https://github.com/pythonforfacebook/facebook-sdk/

https://github.com/facebook/python-sdk

+0

chính xác những gì tôi cần - cảm ơn! – Ron

1

Tại sao bạn sử dụng curl ở nơi đầu tiên?

Python có thư viện mở rộng cho Facebook và các thư viện được bao gồm cho các yêu cầu web, gọi một chương trình khác và nhận đầu ra là không cần thiết.

Điều đó nói rằng,

đầu tiên từ Python Doc

data có thể là một chuỗi xác định dữ liệu bổ sung để gửi đến máy chủ, hoặc None nếu không có dữ liệu như vậy là cần thiết. Yêu cầu HTTP hiện tại là chỉ những yêu cầu sử dụng dữ liệu; yêu cầu HTTP sẽ là POST thay vì NHẬN khi tham số dữ liệu được cung cấp. data phải là bộ đệm ở định dạng tiêu chuẩn application/x-www-form-urlencoded. Hàm urllib.urlencode() lấy một ánh xạ hoặc chuỗi 2-tuples và trả về một chuỗi ở định dạng này. mô-đun urllib2 gửi các yêu cầu HTTP/1.1 với Kết nối: bao gồm tiêu đề đóng.

Vì vậy,

import urllib2, urllib 
parameters = {} 
parameters['token'] = 'sdfsdb23424' 
parameters['message'] = 'Hello world' 
target = 'http://www.target.net/work' 

parameters = urllib.urlencode(parameters) 
handler = urllib2.urlopen(target, parameters) 
while True: 
    if handler.code < 400: 
     print 'done' 
     # call your job 
     break 
    elif handler.code >= 400: 
     print 'bad request or error' 
     # failed 
     break 
Các vấn đề liên quan