Автоматическая авторизация в twitter - SetandWork!
Главная > Программирование > Автоматическая авторизация в twitter

Автоматическая авторизация в twitter

Здесь будет показан пример работы библиотеки cURL. Задача — авторизироваться в твиттере.

Для того чтобы это сделать необходимо отследить как это делается вручную и с эмулировать это с помощью нашего будущего скрипта.

Для того чтобы посмотреть как общаются сервер и браузер между собой когда мы авторизируемся воспользуемся браузером файрфокс и его безплатным приложением LiveHTTPHeaders.

Вот как это выглядит у меня на экране:

LiveHTTPHeaders для файрфокс - внешний вид

Я уже имею аккаунт на твиттере. Советую предварительно и Вам завести его.

Работу мы будем вести с мобильной версией твиттера mobile.twitter.com, поскольку она проще. А заходить уже будем сразу со странички с авторизацией:� https://mobile.twitter.com/session/new Как видим https, шифрованое соединение. Но пусть это нас не смущает.

Дальше когда авторизируюсь то получаю вот такие заголовки:

https://mobile.twitter.com/session

POST /session HTTP/1.1
Host: mobile.twitter.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 sputnik 2.4.0.49
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: https://mobile.twitter.com/session/new
Cookie: k=10.35.51.113.1329252939822698; guest_id=v1%3A132925293982531013; _twitter_sess=BAh7CjoMY3NyZl9pZCIlNTA4NDU3ZGU3ZmNhNzY5MDNhYjFlYmRkMTllY2I2%250AZjY6D2NyZWF0ZWRfYXRsKwhRZLB9NQE6FWluX25ld191c2VyX2Zsb3cwOgdp%250AZCIlYWE3YzNkNjdmNDhkMjcxOWI1MGU3NzdiMWE2OTM5ZDYiCmZsYXNoSUM6%250AJ0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2Vk%250AewA%253D--8a61785abcf4ed97c266bc32e4ae29a887710452; __utma=43838368.1224808469.1329252953.1329252953.1329252953.1; __utmc=43838368; __utmz=43838368.1329252953.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); twll=l%3D1329253305; t1=1; ab_sess_empty_timeline_176=1; dnt=1; _mobile_sess=BAh7CDoPc2Vzc2lvbl9pZCIlNWFjODMxNmE4NTYzZDIzYzQxYzcxY2M3NjNlZTAzODE6FHNpZ251cF9hdHRlbXB0c2kGOhBfY3NyZl90b2tlbiIZYTI4YzljZmRjZDQ3MTZkNWFhMzA%3D--a44d07df9fa0e1d121055dff5c0aac84b931c625; ssl_only=1
Content-Type: application/x-www-form-urlencoded
Content-Length: 75
authenticity_token=a28c9cfdcd4716d5aa30&username=мой логин&password=мой пароль

HTTP/1.1 302 Found
Date: Tue, 14 Feb 2012 21:41:47 GMT
Server: hi
Status: 302 Found
x-frame-options: SAMEORIGIN
Content-Language: ru
Location: https://mobile.twitter.com/
Content-Type: text/html; charset=utf-8
X-Runtime: 77
X-XSS-Protection: 1; mode=block
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Set-Cookie: oauth_token=eyJrIjoiMzU5NDUyMDAwLTRWbkhEcWJuZWZubW1NWVE4SEpocFgwQnR5WVFZT3RyejU4UE1WYTciLCJzIjoiQ0FwSmNNNWNnRnpzWExzWHlyb0d6RDFocGdFMTMzajhta3pucyJ9; path=/; expires=Mon, 14-Feb-2022 21:41:47 GMT; secure; HttpOnly
Set-Cookie: _mobile_sess=BAh7CDoPc2Vzc2lvbl9pZCIlNWFjODMxNmE4NTYzZDIzYzQxYzcxY2M3NjNlZTAzODE6FHNpZ251cF9hdHRlbXB0c2kGOhBfY3NyZl90b2tlbiIZYTI4YzljZmRjZDQ3MTZkNWFhMzA%3D--a44d07df9fa0e1d121055dff5c0aac84b931c625; path=/; expires=Thu, 12-Apr-2012 23:08:05 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 100
Connection: close
----------------------------------------------------------
https://mobile.twitter.com/

GET / HTTP/1.1
Host: mobile.twitter.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13 sputnik 2.4.0.49
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Referer: https://mobile.twitter.com/session/new
Cookie: k=10.35.51.113.1329252939822698; guest_id=v1%3A132925293982531013; _twitter_sess=BAh7CjoMY3NyZl9pZCIlNTA4NDU3ZGU3ZmNhNzY5MDNhYjFlYmRkMTllY2I2%250AZjY6D2NyZWF0ZWRfYXRsKwhRZLB9NQE6FWluX25ld191c2VyX2Zsb3cwOgdp%250AZCIlYWE3YzNkNjdmNDhkMjcxOWI1MGU3NzdiMWE2OTM5ZDYiCmZsYXNoSUM6%250AJ0FjdGlvbkNvbnRyb2xsZXI6OkZsYXNoOjpGbGFzaEhhc2h7AAY6CkB1c2Vk%250AewA%253D--8a61785abcf4ed97c266bc32e4ae29a887710452; __utma=43838368.1224808469.1329252953.1329252953.1329252953.1; __utmc=43838368; __utmz=43838368.1329252953.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); twll=l%3D1329253305; t1=1; ab_sess_empty_timeline_176=1; dnt=1; _mobile_sess=BAh7CDoPc2Vzc2lvbl9pZCIlNWFjODMxNmE4NTYzZDIzYzQxYzcxY2M3NjNlZTAzODE6FHNpZ251cF9hdHRlbXB0c2kGOhBfY3NyZl90b2tlbiIZYTI4YzljZmRjZDQ3MTZkNWFhMzA%3D--a44d07df9fa0e1d121055dff5c0aac84b931c625; ssl_only=1; oauth_token=eyJrIjoiMzU5NDUyMDAwLTRWbkhEcWJuZWZubW1NWVE4SEpocFgwQnR5WVFZT3RyejU4UE1WYTciLCJzIjoiQ0FwSmNNNWNnRnpzWExzWHlyb0d6RDFocGdFMTMzajhta3pucyJ9

HTTP/1.1 200 OK
Date: Tue, 14 Feb 2012 21:41:48 GMT
Server: hi
Status: 200 OK
Etag: «0441b5f4893843ba41cf8b9b1d0aefdf»-gzip
x-frame-options: SAMEORIGIN
Content-Language: ru
Content-Type: text/html; charset=utf-8
X-Runtime: 417
X-XSS-Protection: 1; mode=block
Pragma: no-cache
Expires: Mon, 01 Jan 1990 00:00:00 GMT
Cache-Control: no-cache, no-store, max-age=0, must-revalidate
Set-Cookie: _mobile_sess=BAh7CDoPc2Vzc2lvbl9pZCIlNWFjODMxNmE4NTYzZDIzYzQxYzcxY2M3NjNlZTAzODE6FHNpZ251cF9hdHRlbXB0c2kGOhBfY3NyZl90b2tlbiIZYTI4YzljZmRjZDQ3MTZkNWFhMzA%3D--a44d07df9fa0e1d121055dff5c0aac84b931c625; path=/; expires=Thu, 12-Apr-2012 23:08:05 GMT
Vary: Accept-Encoding
Content-Encoding: gzip
Content-Length: 5422
Connection: close
----------------------------------------------------------

Не пугайтесь этого длинного текста. Суть здесь намного проще. Я отсылаю серверу свой логин и пароль а также некий ключ. Вот эта строчка:

authenticity_token=a28c9cfdcd4716d5aa30&username=мой логин&password=мой пароль

authenticity_token есть на самой первой страничке. Его буду вытягивать с помощью регулярных выражений.

Далее сервер меня отсылает на стартовую страничку уже авторизированным� https://mobile.twitter.com/. Там походу еще куки туда-сюда. Но не стоит обращать на них внимания. Они у нас вообще будут автоматически далее.

Перед тем как переходить к написанию скрипта спонсор заметки попросил написать где купить garmin.

Ну и собственно сам скрипт авторизации с пояснениями:

<?php

// передаю параметры. Если null то ничего не передано, их не всегда нужно передавать
function connect ($link,$post=null,$ref_url=null){

//начинаю работу с библиотекой cURL
$ch = curl_init ();

//далее идут настройки. И первой — адрес по которому будет идти скрипт
curl_setopt ($ch, CURLOPT_URL,$link);

//нам нужно возвращать содержимое, хотим посмотреть на него
curl_setopt ($ch, CURLOPT_RETURNTRANSFER,1);

//задержка на ожидание ответа
curl_setopt ($ch, CURLOPT_TIMEOUT, 20);

// заголовки возвращать не нужно, смотреть на них не будем
curl_setopt ($ch, CURLOPT_HEADER, 0);

// эти две строчки — работа с куками. tw.txt — файл для хранения оных.
curl_setopt ($ch, CURLOPT_COOKIEFILE, «tw.txt»);
curl_setopt ($ch, CURLOPT_COOKIEJAR, «tw.txt»);

// особо не разобрался, но вычитал что для работы с https соединениями в данном случае эти две строчки должны быть такими
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYHOST, 0);
// это необходимо, чтобы cURL не высылал заголовок на ожидание
curl_setopt ($ch, CURLOPT_HTTPHEADER, array ('Expect:'));

// эта строчка значит: «Привет! Я браузер „Мозилла“»
curl_setopt ($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.9.0.3) Gecko/2008092417 Firefox/3.0.3');

//автоматический редирект
 curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);

// если есть пост запрос то отсылаем его
if ($post !== null){
curl_setopt ($ch, CURLOPT_POST, 1);
curl_setopt ($ch, CURLOPT_POSTFIELDS, $post);}

// если есть «откуда пришли» то отсылаем его
if ($ref_url!== null){
curl_setopt ($ch, CURLOPT_REFERER,$ref_url);
}

// запускаем все это дело
$otvet = curl_exec ($ch);

// закрываем соединение
curl_close ($ch);

// возвращаем результат работы функции
return $otvet;
}

// страница с авторизацией
$link='https://mobile.twitter.com/session/new';

// заходим на нее
$otvet=connect ($link);

// с помощью регулярки выдираем ключ
preg_match («|authenticity_token[\"] type=[\"]hidden[\"] value=[\"](.*)[\"]|»,$otvet,$array);

// готовим post запрос
$post='authenticity_token='.$array[1].'&username=мой логин&password=мой пароль';

// ссылка куда будем идти дальше
$link2='https://mobile.twitter.com/session';

//откуда пришли
$ref_url='https://mobile.twitter.com/session/new';

// отсылаем:"Привет сервер Твиттера. Я иду по такому то адресу и вот мой ключ, логин и пароль. А Иду я оттуда-то".
$otvet=connect ($link2,$post,$ref_url);

//Далее, почему редирект автоматически не прошел. Значит придется перейти вручную на стартовую страничку
$link3='https://mobile.twitter.com';
$ref_url='https://mobile.twitter.com/session/new';

// пост запрос не отсылаем и чтобы место не пустовало пишем null
$otvet=connect ($link3,null,$ref_url);

// выводим ответ
echo $otvet;
?>

А далее таким же макаром можно отсылать свои твиты: отслеживаем заголовки и эмулируем с помощью библиотеки cURL.



Похожие записи по теме:
Понравился пост? Подпишись на обновления блога: RSS wordpress insideRSSRSS wordpress insideEmailtwitter wordpress insideTwitter!
 
Категории: Программирование  Просмотров: 110

Уважаемый комментатор, я очень благодарен за оставленные тобой комментарии! Мне очень приятно их читать. Но порой встречаются люди, которые просто в наглую пытаются продвинуть свой ресурс, размещая ссылку в комментариях только для того, что бы увеличить ТИЦ. Меня порой просто удивляют такие люди... С недавних пор я стал сносить ссылки, которые идут на откровенный бред, никак не похожий на мой блог. Все остальные нормальные блоги будут опубликованы! Если Вы спамер, проходите мимо! Не тратьте время зря! Я ведь всё равно проверяю каждый сайт на соответствие с требованиями. :)