2011-10-19 7 views
7

में एचटीपी पोस्ट कर्ल मुझे पाइथन के अंदर से कर्ल का उपयोग करके HTTP पोस्ट अनुरोध जारी करने में समस्या हो रही है।पाइथन

मैं फेसबुक ओपन ग्राफ पर पोस्ट करने के लिए तैयार हूं। यहां वे उदाहरण दिया गया है जो मैं वास्तव में पाइथन में दोहराना चाहता हूं।

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

क्या कोई इसे समझने में मेरी सहायता कर सकता है?

उत्तर

14

आप httplib का उपयोग अजगर के साथ पोस्ट करने के लिए या उच्च स्तर 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() 

भी है कि आप के लिए सभी पोस्ट-इंग करता है अजगर के लिए एक फेसबुक विशिष्ट उच्च स्तर पुस्तकालय है सकते हैं।

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

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

+0

मैं वास्तव में क्या जरूरत - धन्यवाद! – Ron

1

क्यों आप पहली जगह में कर्ल प्रयोग करते हैं?

पायथन के पास फेसबुक के लिए व्यापक पुस्तकालय हैं और वेब अनुरोधों के लिए पुस्तकालय शामिल हैं, अन्य प्रोग्राम को कॉल करना और आउटपुट प्राप्त करना अनावश्यक है।

जिसके अनुसार,

अजगर डॉक्टर

data से

पहले एक स्ट्रिंग अतिरिक्त डेटा को निर्दिष्ट ऐसी कोई डेटा की जरूरत है, तो सर्वर, या None को भेजने के लिए हो सकता है। वर्तमान में HTTP अनुरोध केवल डेटा का उपयोग करने वाले हैं; HTTP अनुरोध POST के बजाय डेटा पैरामीटर प्रदान किए जाने पर होगा। 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