2013-05-08 9 views
6

मैं php + कर्ल के साथ चहचहाना में प्रवेश करने की कोशिश कर रहा हूँ के साथ चहचहाना में प्रवेश करने के लिए, लेकिन मुझे लगता है कि वहाँ कुछ मेरे अनुरोध के साथ गलत है क्योंकि मैं प्रतिक्रिया के रूप में यह मिलता है:कर्ल

कुछ तकनीकी रूप से गलत है।

ध्यान देने के लिए धन्यवाद- हम इसे ठीक करने जा रहे हैं और चीजें जल्द ही सामान्य पर ले जाएंगी।

php कोड मैं का उपयोग कर रहा है:

सत्र [username_or_email] = उपयोगकर्ता & सत्र [पासवर्ड] = पासवर्ड & remember_me =:

<?php 
      $ch = curl_init($sTarget); 
      curl_setopt($ch, CURLOPT_HEADER, false); 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $sPost); 
      curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
      curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
      curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
      curl_setopt($ch, CURLOPT_COOKIESESSION, true); 
      curl_setopt($ch, CURLOPT_COOKIEJAR, $_CKS); 
      curl_setopt($ch, CURLOPT_COOKIEFILE, $_CKS); 
      curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
      curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: multipart/form-data")); 
      curl_setopt($ch, CURLOPT_REFERER, "https://twitter.com"); 

?> 

$ sPost इस तरह दिखता है 1 & scribe_log = & redirect_after_login = & प्रामाणिकता_टोकन = 6e706165609354bd7a92a99cf94e09140ea86c6f

कोड पहले लॉगिन फॉर्म फ़ील्ड प्राप्त करता है ताकि पोस्ट चर के उचित मान (ऑथ टोकन) हो। मैंने बस सबकुछ के बारे में कोशिश की और हां, मुझे पता है कि इसके लिए एक एपीआई है, लेकिन मैं सीखना चाहता हूं कि सीखने के लिए मैन्युअल कैसे करें।

अग्रिम धन्यवाद।

उत्तर

9

CURLOPT_COOKIESESSION का उपयोग नए सत्र को इंगित करने के लिए किया जाता है। यह वही नहीं है जो आप चाहते हैं, क्योंकि आपको दूसरी पोस्ट में सत्र कुकी भेजने की आवश्यकता है।

<?php 

# First call gets hidden form field authenticity_token 
# and session cookie 
$ch = curl_init(); 
$sTarget = "https://twitter.com/"; 
curl_setopt($ch, CURLOPT_URL, $sTarget); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false); 
curl_setopt($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']); 
curl_setopt($ch, CURLOPT_COOKIEFILE, "/tmp/cookie.txt"); 
curl_setopt($ch, CURLOPT_REFERER, "https://twitter.com/"); 
$html = curl_exec($ch); 

# parse authenticity_token out of html response 
preg_match('/<input type="hidden" value="([a-zA-Z0-9]*)" name="authenticity_token"\/>/', $html, $match); 
$authenticity_token = $match[1]; 

$username = "[email protected]"; 
$password = "password"; 

# set post data 
$sPost = "session[username_or_email]=$username&session[password]=$password&return_to_ssl=true&scribe_log=&redirect_after_login=%2F&authenticity_token=$authenticity_token"; 

# second call is a post and performs login 
$sTarget = "https://twitter.com/sessions"; 
curl_setopt($ch, CURLOPT_URL, $sTarget); 
curl_setopt($ch, CURLOPT_POST, true); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $sPost); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, false); 
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-type: application/x-www-form-urlencoded")); 

# display server response 
curl_exec($ch); 
curl_close($ch); 

?> 

पुनश्च:: अपनी पोस्ट ठीक से पहली बार पढ़ नहीं के लिए खेद है

मैं इस कोड के साथ काम करने के लिए चहचहाना लॉगिन मिला है।

+0

मैं उपयोगकर्ता का उपयोग करके लॉग इन करने के बारे में कैसे जाउंगा? स्क्रिप्ट उपयोगकर्ता को लॉग इन करने के लिए काम करती है लेकिन सत्र नहीं रहता है। – Zy0n

+0

आप बाद में अनुरोधों में दोबारा उपयोग करने के लिए फ़ाइल में संग्रहीत कुकीज़ प्राप्त करने के लिए CURLOPT_COOKIEJAR का उपयोग करेंगे। –

2

मैं दो बातों पर ध्यान:

1) अपनी पोस्ट डेटा यूआरएल के लिए प्रयास करें सांकेतिक शब्दों में बदलना

जैसे: सत्र% 5Busername_or_email% 5D = उपयोगकर्ता & सत्र% 5Bpassword% 5D = पासवर्ड ...

के बजाय: सत्र [username_or_email] = उपयोगकर्ता & सत्र [पासवर्ड] = पासवर्ड ...

2) चहचहाना एक छिपा authenticity_token नामित क्षेत्र है लॉगिन फॉर्म में। यह सत्र के लिए बाध्य है। इस प्रकार आप एक स्थिर प्रामाणिकता का उपयोग नहीं कर सकते हैं, आपको पहले लॉगिन फॉर्म पढ़ना होगा और वहां से प्रामाणिकता_टोकन फ़ील्ड का उपयोग करना होगा।

उम्मीद है कि मदद करता है।

+0

मेरे पास पहले से ही कोड है जो गतिशील लेख टोकन लेता है जैसा कि मैंने कहा था। चरों को एन्कोड करने की भी कोशिश की लेकिन इसका अभी भी कोई प्रभाव नहीं पड़ा, हालांकि आपकी मदद के लिए धन्यवाद। – JustaN00b