2011-10-19 49 views
7

我無法理解如何使用python內部的curl發出HTTP POST請求。python中的HTTP POST curl

我打算張貼到facebook打開圖。這裏是他們給我的例子,我想用Python完全複製。

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

任何人都可以幫助我理解這一點嗎?

回答

14

您可以使用httplib與Python張貼或上級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() 

還有一個用於Python的Facebook的特定較高水平庫,完成了所有的POST-ING爲您服務。

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

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

+0

正是我需要的 - 謝謝! – Ron

1

你爲何用捲曲擺在首位?

Python擁有豐富的庫,用於Facebook並且包含用於Web請求的庫,調用另一個程序和接收輸出是不必要的。

這就是說,

首先在Python文件

data可以是指定的附加數據如果不需要這樣的數據,以發送到服務器, 或None的字符串。目前HTTP請求只有使用數據的請求是 ; 當提供數據參數時,HTTP請求將是POST而不是 GET。 data應該是 格式的標準application/x-www-form-urlencoded緩衝區。 urllib.urlencode()函數採用2元組的映射或序列 ,並以此格式返回字符串。 urllib2模塊通過連接發送包含關閉頭的HTTP/1.1 請求。

所以,

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