
08.01.2010, 21:41
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
С нами:
11278406
Репутация:
818
|
|
Есть у когонить пример авторизации на Yandex.ru ?
Когда-то писал, сейчас незнаю работает или нет, проверь.
PHP код:
function login($login,$pass)
{
$ch = curl_init('https://passport.yandex.ru/passport?mode=auth');
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.3');
curl_setopt($ch, CURLOPT_REFERER, 'https://passport.yandex.ru/passport?mode=auth');
curl_setopt($ch, CURLOPT_COOKIEJAR, $_SERVER['DOCUMENT_ROOT'].'cook.txt');
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, "login=$login&passwd=$pass");
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$res = curl_exec($ch);
if(preg_match('#https:\/\/passport\.yandex.ru\/passport\?mode=logout#',$res))
return true;
}
|
|
|

08.01.2010, 22:16
|
|
Познающий
Регистрация: 20.12.2008
Сообщений: 76
С нами:
9152717
Репутация:
6
|
|
PHP код:
<?php
$port = 10001;
// create a streaming socket, of type TCP/IP
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// set the option to reuse the port
socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);
// "bind" the socket to the address to "localhost", on port $port
// so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
socket_bind($sock, 0, $port);
// start listen for connections
socket_listen($sock);
// create a list of all the clients that will be connected to us..
// add the listening socket to this list
$clients = array($sock);
while (true) {
// create a copy, so $clients doesn't get modified by socket_select()
$read = $clients;
// get a list of all the clients that have data to be read from
// if there are no clients with data, go to next iteration
if (socket_select($read, $write = NULL, $except = NULL, 0) < 1)
continue;
// check if there is a client trying to connect
if (in_array($sock, $read)) {
// accept the client, and add him to the $clients array
$clients[] = $newsock = socket_accept($sock);
// send the client a welcome message
socket_write($newsock, "Hello, this is welcome message\n".
"There are ".(count($clients) - 1)." client(s) connected to the server\n");
socket_getpeername($newsock, $ip);
echo "New client connected: {$ip}\n";
// remove the listening socket from the clients-with-data array
$key = array_search($sock, $read);
unset($read[$key]);
}
// loop through all the clients that have data to read from
foreach ($read as $read_sock) {
// read until newline or 1024 bytes
// socket_read while show errors when the client is disconnected, so silence the error messages
$data = @socket_read($read_sock, 1024, PHP_NORMAL_READ);
// check if the client is disconnected
if ($data === false) {
// remove client for $clients array
$key = array_search($read_sock, $clients);
unset($clients[$key]);
echo "client disconnected.\n";
// continue to the next client to read from, if any
continue;
}
// trim off the trailing/beginning white spaces
$data = trim($data);
// check if there is any data after trimming off the spaces
if (!empty($data)) {
// send this to all the clients in the $clients array (except the first one, which is a listening socket)
foreach ($clients as $send_sock) {
// if its the listening sock or the client that we got the message from, go to the next one in the list
if ($send_sock == $sock || $send_sock == $read_sock){
//continue;
if ($data == 'shutdown') {
socket_write($send_sock, "Ololo"."\n");
}
}
// write the message to the client -- add a newline character to the end of the message
//socket_write($send_sock, $data."\n");
//echo($data."\n");
} // end of broadcast foreach
echo($data."\n");
// if ($data == 'shutdown') {
// socket_write($send_sock, "Ololo"."\n");
//}
}
} // end of reading foreach
}
// close the listening socket
socket_close($sock);
?>
Почему если я с какого либо клиента отсылаю shutdown, то пишет:
Код:
Warning: socket_write(): unable to write to socket [0]: ╟ряЁюё эр юЄяЁртъє шыш я
юыєўхэшх фрээ√ї (when sending on a datagram socket using a sendto call) no addr
ess was supplied.
in D:\xampp\htdocs\test2.php on line 77
Однако сообщение Ololo приходит. Мне надо чтобы я с 1 клиента отсылал например сообщение shutdown, а скрипт мне в ответ слал Ololo, т.е. чтобы Ololo приходило тому клиенту кто отсылает скрипту shutdown и только ему.
P.S. выручайте новичка, с меня +
Если надо, то вот оригинальный скрипт:
PHP код:
<?php
$port = 9050;
// create a streaming socket, of type TCP/IP
$sock = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
// set the option to reuse the port
socket_set_option($sock, SOL_SOCKET, SO_REUSEADDR, 1);
// "bind" the socket to the address to "localhost", on port $port
// so this means that all connections on this port are now our resposibility to send/recv data, disconnect, etc..
socket_bind($sock, 0, $port);
// start listen for connections
socket_listen($sock);
// create a list of all the clients that will be connected to us..
// add the listening socket to this list
$clients = array($sock);
while (true) {
// create a copy, so $clients doesn't get modified by socket_select()
$read = $clients;
// get a list of all the clients that have data to be read from
// if there are no clients with data, go to next iteration
if (socket_select($read, $write = NULL, $except = NULL, 0) < 1)
continue;
// check if there is a client trying to connect
if (in_array($sock, $read)) {
// accept the client, and add him to the $clients array
$clients[] = $newsock = socket_accept($sock);
// send the client a welcome message
socket_write($newsock, "no noobs, but ill make an exception :)\n".
"There are ".(count($clients) - 1)." client(s) connected to the server\n");
socket_getpeername($newsock, $ip);
echo "New client connected: {$ip}\n";
// remove the listening socket from the clients-with-data array
$key = array_search($sock, $read);
unset($read[$key]);
}
// loop through all the clients that have data to read from
foreach ($read as $read_sock) {
// read until newline or 1024 bytes
// socket_read while show errors when the client is disconnected, so silence the error messages
$data = @socket_read($read_sock, 1024, PHP_NORMAL_READ);
// check if the client is disconnected
if ($data === false) {
// remove client for $clients array
$key = array_search($read_sock, $clients);
unset($clients[$key]);
echo "client disconnected.\n";
// continue to the next client to read from, if any
continue;
}
// trim off the trailing/beginning white spaces
$data = trim($data);
// check if there is any data after trimming off the spaces
if (!empty($data)) {
// send this to all the clients in the $clients array (except the first one, which is a listening socket)
foreach ($clients as $send_sock) {
// if its the listening sock or the client that we got the message from, go to the next one in the list
if ($send_sock == $sock || $send_sock == $read_sock)
continue;
// write the message to the client -- add a newline character to the end of the message
socket_write($send_sock, $data."\n");
} // end of broadcast foreach
}
} // end of reading foreach
}
// close the listening socket
socket_close($sock);
?>
|
|
|

08.01.2010, 23:06
|
|
Reservists Of Antichat - Level 6
Регистрация: 25.04.2008
Сообщений: 827
С нами:
9497186
Репутация:
1304
|
|
Maxxxtri23 Все ж подписано и каждая строчка прокомментирована >.<
Проблема тут: if ($send_sock == $sock || $send_sock == $read_sock) Скрипт просматривает все сокеты из массива и ищет два: сокет, который принимает новых пользователей и собственно отправителя текущего сообщения. Условия следует разделить - сокет для принятия всегда пропускать. А отправителю слать соответствующее сообщение
PHP код:
if ($send_sock = $sock) continue;
if ($send_sock = $read_sock) socket_write($send_sock, "olololo\n");
Kusto Накладные расходы (памяти/процессора) на подсчет количества элементов в массиве - меньше (естественно, если не загонять подсчет в условие окончания цикла), чем использование foreach
admink1 Либо вы несете чушь и сами не понимаете чего хотите, либо не формулируете до конца задачу. Зачем использовать вложенные циклы, если можно последовательно считывать и обращаться к соответствующим страницам? В чем принципиальная важность второго цикла?
__________________
Любая действущая программа устарела.
Создайте систему, которой сможет пользоваться даже дурак ,и только дурак захочет ею пользоваться.
Как правильно задавать вопросы: _http://www.yakimchuk.ru/questions.htm
Последний раз редактировалось Gifts; 08.01.2010 в 23:20..
|
|
|

09.01.2010, 01:08
|
|
Участник форума
Регистрация: 12.06.2009
Сообщений: 108
С нами:
8902826
Репутация:
54
|
|
Сообщение от Gifts
admink1 Либо вы несете чушь и сами не понимаете чего хотите, либо не формулируете до конца задачу. Зачем использовать вложенные циклы, если можно последовательно считывать и обращаться к соответствующим страницам? В чем принципиальная важность второго цикла?
полная задача такова:
1. нужно выдернуть акк из файла.
2. залогиниться.
3. выдернуть из другого текстовика три первые ссылки(1,2,3 строчки)
4. по очереди пройтись по этим трем ссылкам и написать текст.
5. поменять акк
6. залогинится
7. и вновь выдернть из текстовика три последующие ссылки(4,5,6 строчки) и написать текст.
//сделал все , кроме 7ого пункта, получается что всегда по всему файлу проходится, а как хотелось бы не получается 
|
|
|

09.01.2010, 01:24
|
|
Moderator - Level 7
Регистрация: 04.02.2007
Сообщений: 554
С нами:
10139306
Репутация:
1089
|
|
Сообщение от admink1
полная задача такова:
1. нужно выдернуть акк из файла.
2. залогиниться.
3. выдернуть из другого текстовика три первые ссылки(1,2,3 строчки)
4. по очереди пройтись по этим трем ссылкам и написать текст.
5. поменять акк
6. залогинится
7. и вновь выдернть из текстовика три последующие ссылки(4,5,6 строчки) и написать текст.
//сделал все , кроме 7ого пункта, получается что всегда по всему файлу проходится, а как хотелось бы не получается 
сразу говорю этот скрипт я не проверял- но в таком виде должно пахать (как я понял у тя два текста в одном логины и пароли в другом айди)
PHP код:
<?php
$k = file('id.txt');
$x= file('name.txt');
$a=array_chunk($k,3);
foreach ($a as $c => $d){
echo " </br> $x[$c] дернули первый акк и залогинились</br></br>";
foreach ($d as $f) echo " суперссылкавконтакта и id=$f </br> ";
}
?>
там где строчка
PHP код:
echo " </br> $x дернули первый акк и залогинились</br></br>";
можеш вставлять людые действия (логиниться, и т д)
а в этой строчке
PHP код:
foreach ($d as $f) echo " суперссылкавконтакта и id=$f </br> ";
отправляй сообщения и т д)
И дай ответ работает или нет? (и пускай тебя foreach несмущает- внутри него тоже можно производить любые операции как в любом- другом цикле)
Я непойму что тебя смущало в предыдущих вариантах- практически они все были рабочие просто я по мере твоих обьяснений добавлял все новое и новое, лично я как бы сделал
- составил функцию и внутри циклов бы ее вызывал, я вообще невижу никаких проблемм (непойму что тебя смущает в предложенныхвариантах)
Последний раз редактировалось Kusto; 09.01.2010 в 03:34..
|
|
|

09.01.2010, 01:41
|
|
Участник форума
Регистрация: 12.06.2009
Сообщений: 108
С нами:
8902826
Репутация:
54
|
|
Сообщение от Kusto
И дай ответ работает или нет?
не я так пробовал уже 
если имеется текстовик со следующим содержанием:
что он делает,
1) он логинится все норм,
2) потом выдергивает 3 строчку, заходит по ссылки, потом выдергивает 6 строчку, 9, 12 и так далее, до конца файла.
3) до кончца файла доходит, меняет акк, потом с другим акком проходит, тоже самое делает, то есть проходится по 3 строчке, 6, 9, и так пока конец файла не найдет.
а нужно, чтоб первый акк прошелся по первым трем ссылкам, второй акк по 4-6 ссылке, и так далее 
|
|
|

09.01.2010, 01:45
|
|
Moderator - Level 7
Регистрация: 04.02.2007
Сообщений: 554
С нами:
10139306
Репутация:
1089
|
|
Сообщение от admink1
не я так пробовал уже 
если имеется текстовик со следующим содержанием:
что он делает,
1) он логинится все норм,
2) потом выдергивает 3 строчку, заходит по ссылки, потом выдергивает 6 строчку, 9, 12 и так далее, до конца файла.
3) до кончца файла доходит, меняет акк, потом с другим акком проходит, тоже самое делает, то есть проходится по 3 строчке, 6, 9, и так пока конец файла не найдет.
а нужно, чтоб первый акк прошелся по первым трем ссылкам, второй акк по 4-6 ссылке, и так далее 
как он может использовать один ак если вызывает из списка совершенно другой акк (с которым и проходит по 3 ссылкам)- 3 ссылки прошло- дергает другой акк и т д (или те не такое надо?)
вот именно= первый акк проходит по первым трем- второй по 4,5,6 (см скрипт выше)
|
|
|

09.01.2010, 10:55
|
|
Познавший АНТИЧАТ
Регистрация: 29.04.2007
Сообщений: 1,189
С нами:
10018169
Репутация:
1680
|
|
Какие функции кроме как fsockopen и cURL могут послать сайту POST запрос?
Да, и ещё из конфига phpinfo:
cURL support enabled
cURL Information libcurl/7.18.1 OpenSSL/0.9.7d zlib/1.1.4
Вроде бы cURL включён, но при попытке отправить пакет с данными, выдаёт ошибку 28
Ну вот пример например:
Код:
<?php
$ch = curl_init('http://ya.ru');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$res = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
curl_close($ch);
if($errno > 0)
echo $errno.':'.$error;
else echo $res;
?>
Ответ сервера:
28:connect() timed out!
Последний раз редактировалось Nightmarе; 09.01.2010 в 10:59..
|
|
|

09.01.2010, 15:35
|
|
Moderator - Level 7
Регистрация: 04.02.2007
Сообщений: 554
С нами:
10139306
Репутация:
1089
|
|
Сообщение от Nightmarе
Какие функции кроме как fsockopen и cURL могут послать сайту POST запрос?
Да, и ещё из конфига phpinfo:
cURL support enabled
cURL Information libcurl/7.18.1 OpenSSL/0.9.7d zlib/1.1.4
Вроде бы cURL включён, но при попытке отправить пакет с данными, выдаёт ошибку 28
Ну вот пример например:
Код:
<?php
$ch = curl_init('http://ya.ru');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$res = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
curl_close($ch);
if($errno > 0)
echo $errno.':'.$error;
else echo $res;
?>
Ответ сервера:
28:connect() timed out!
обрати внимание на эту страницу и сравни со своим курлом (там два варианта для яндекса) походу дела в курле недостаточно данных- вот и ждет ответ и время ожидания заканчиваеться (так вроде в ошибке написанно у тебя)
http://forum.antichat.ru/threadnav40896-1422-10.html
|
|
|

09.01.2010, 15:43
|
|
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
С нами:
11278406
Репутация:
818
|
|
Сообщение от Nightmarе
Какие функции кроме как fsockopen и cURL могут послать сайту POST запрос?
Да, и ещё из конфига phpinfo:
cURL support enabled
cURL Information libcurl/7.18.1 OpenSSL/0.9.7d zlib/1.1.4
Вроде бы cURL включён, но при попытке отправить пакет с данными, выдаёт ошибку 28
Ну вот пример например:
Код:
<?php
$ch = curl_init('http://ya.ru');
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 3);
$res = curl_exec($ch);
$errno = curl_errno($ch);
$error = curl_error($ch);
curl_close($ch);
if($errno > 0)
echo $errno.':'.$error;
else echo $res;
?>
Ответ сервера:
28:connect() timed out!
curl_setopt($ch, CURLOPT_TIMEOUT, 3); Выставь больше, у тебя видимо слабый канал, поставь 10.
|
|
|
|
 |
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
|
|