php, Отпарсить captcha.yandex.net

12 3
Grimich
На сайте с 08.04.2009
Offline
43
3082

Помогите, вообще не выходит никак.. Не желают байты оттуда забираться :(

Курл не предлагать :)

$page='/';

function get_captcha($page)
{
$ua='Opera/9.80 (Windows NT 6.1; U; ru) Presto/2.2.15 Version/10.20';
$page=trim($page);
$site=trim('captcha.yandex.net');
$socket = fsockopen($site, 80, $errno, $errstr, 15);
if ($socket){

$send = "GET $page HTTP/1.1\r\n";
$send .= "User-Agent: $ua\r\n";
$send .= "Host: $site\r\n";
$send .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
$send .= "Accept-Language: ru,ru-RU;q=0.9,en;q=0.8\r\n";
$send .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
$send .= "Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n";
$send .= "Cache-Control: no-cache\r\n";
$send .= "Keep-Alive: 300\r\n";
$send .= "Connection: Keep-alive\r\n";
//$send .= 'TE: deflate, gzip, chunked, identity, trailers\r\n';
$he="";
if(fputs($socket,$send))
{
while(!feof($socket))
{
$he .= fgets($socket, 1024);
echo $he;
}
}
fclose($socket);
}
return $he;
}
echo get_captcha($page);

Вот что в коде неправильно, ткните пальцем?

ewg777
На сайте с 04.06.2007
Offline
225
#1

Здесь! *Ткнул*

Что Вы пытаетесь сделать?

Grimich
На сайте с 08.04.2009
Offline
43
#2

Для начала полностью забрать страничку...

ewg777
На сайте с 04.06.2007
Offline
225
#3
Grimich:
Для начала полностью забрать страничку...

file_get_contents($url);
[Удален]
#4
Grimich:
Курл не предлагать

предложил бы решение, да на говне не пишем :)

это путь истинных школьников!

ewg777
На сайте с 04.06.2007
Offline
225
#5
bearman:
предложил бы решение...
это путь истинных школьников!

Тут могут быть:

  • У ТС Денвер, а как поставить курл он не в курсе
  • У ТС хостинг за треть цента. Там, конечно, нет курла
Коля Дубр
На сайте с 02.03.2005
Offline
153
#6
Grimich:
$site=trim('captcha.yandex.net');

Скоро Яндекс будет выводить сообщение:

Чтобы увидеть капчу, введите капчу
Разрабатываю общую шину (http://habrahabr.ru/company/floxim/blog/268467/) помаленьку. ...а еще у меня есть бложек (http://www.blogovo.ru/).
[Удален]
#7
ewg777:
Тут могут быть:

1. У ТС Денвер, а как поставить курл он не в курсе
2. У ТС хостинг за треть цента. Там, конечно, нет курла

1. школьник

2. школьник

итог: школьник :)

Grimich
На сайте с 08.04.2009
Offline
43
#8

ewg777, спасибо...

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

а когда так качаю(file_get_contents($url); ), а потом через iconv меняю кодировку (utf-8->windows1251) куски кода пропадают. Почему - не пойму. Ну да ладно, хоть хтмл видно стало.. Пасиб еще раз

Коля Дубр, кусок кода копипастил просто.. щас пока руки не доходят до очистки от мусора :) Сначала научить исполнять что хочу надо, а потом уже буду код вылизывать

Grimich добавил 17.01.2010 в 16:30

bearman, гуру, риальне!!!!11

[Удален]
#9

эх ...

пальцы гнем что курл гавно, пишем на сокетах как истинные хардкодеры, а пишем что? даже не знаем что. я к тому, что мой код работает, а ваш - нет. концептуальных изменений в коде - 1 строка (а в ней пара символов). спецификацию хттп протокола почитайте, а то ответ от сервера можно годами ждать.


<?
function get_captcha($page)
{
$ua=$_SERVER['HTT_USER_AGENT'];
$page=trim($page);
$site=trim('captcha.yandex.net');
$socket = fsockopen($site, 80, $errno, $errstr, 15);
if ($socket){

$send = "GET $page HTTP/1.1\r\n";
$send .= "User-Agent: $ua\r\n";
$send .= "Host: $site\r\n";
$send .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
$send .= "Accept-Language: ru,ru-RU;q=0.9,en;q=0.8\r\n";
$send .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
$send .= "Cache-Control: no-cache\r\n";
$send .= "Keep-Alive: 300\r\n";
$send .= "Connection: Keep-alive\r\n\r\n";
$he="";
if(fputs($socket,$send))
{
while(!feof($socket))
{
$he .= fgets($socket, 1024);
}
}
fclose($socket);
}
return $he;
}

$page='/';
echo get_captcha($page);
Bitman
На сайте с 05.07.2009
Offline
112
#10

Чего на человека набросились, может он извращенец.

На сокетах можно что угодно сделать, заодно разобраться как http работает.

Ошибка ТС в том что надо последний заголовок вот так окончить

$send .= "Connection: Keep-alive\n\n"; 

+разгребать куки и не забывать от давать реферала

На file_get_contents долеко не уедешь :)

Северный лес (https://euro-vagonka.by) DREW (https://drew.by) AvtoDrive (https://avtodrive.by)
12 3

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий