2014-01-24 5 views
-1

Итак, у меня есть этот скрипт, который использует cURL для входа в твиттер. Однако проблема заключается в том, что, хотя скрипт работает, он создает временный сеанс, и пользователь не входит в систему. Как я могу изменить его, чтобы убедиться, что пользователь действительно зарегистрирован?Twitter логин с cURL

# 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_COOKIEJAR, "/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 = "username"; 
$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

Я хотел бы попробовать добавить:

curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt"); 
0

использовать также вариант печенья банку.

curl_setopt($ch, CURLOPT_COOKIEJAR, "/tmp/cookie.txt"); 

В основном с CURLOPT_COOKIEFILE вариантами завитка использует для загрузки печенья из файла во время отправки запроса. А с помощью CURLOPT_COOKIEJAR параметр curl использует для сохранения (от ответа) cookie в определенный файл.

+0

Хмм, до сих пор нет радости от:/ – Zy0n

+0

Я отредактировал OP, чтобы отразить то, что я использую в данный момент. – Zy0n

+0

В вашем '$ password' могут быть специальные символы. Используйте 'urlencode()' над паролем, чтобы избежать этих. Кроме того, включите режим VERBOSE curl, чтобы проверить ответы, полученные вами из твиттера. 'curl_setopt ($ ch, CURLOPT_VERBOSE, true);' –

Смежные вопросы