Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Как сохранить картинку CAPTCHA


Автор: GeoGeo 26.1.2008, 18:04
Как сохранить картинку если она отображается вот так http://uo.emilia.net.ua/Reg/index.php
Т.Е. как результат работы php ?
Спасибо

Автор: KSURi 26.1.2008, 18:51
Если понял вас правильно, то:
Код

use LWP::UserAgent->new;
my $ua = LWP::UserAgent->new;
my $res = $ua->get('http://uo.emilia.net.ua/Reg/img.php',
                                 ':content_file' => 'picture.gif');
die 'request failed' if $res -> is_error;

Автор: GeoGeo 26.1.2008, 19:22
Если бы все было так просто ... дело в том , что img.php не даёт ссылку на изображение ... 


Код

use LWP::UserAgent;
my $ua = LWP::UserAgent->new;
my $res = $ua->get('http://uo.emilia.net.ua/Reg/img.php',
                                 ':content_file' => 'picture.gif');
die 'request failed' if $res -> is_error;
open (FILE , ">newgif2.gif");
         binmode( FILE );
         print FILE $img;


Сохраняет пустой файл ...

Автор: GeoGeo 26.1.2008, 20:03
Код

#!/usr/bin/perl
use strict;
use warnings;
use LWP;
my $ua = LWP::UserAgent->new();
$ua->timeout(5);
$ua->agent( "Mozilla/5.0" );
my $url = "http://uo.emilia.net.ua/Reg/img.php";
my $document = $ua->request( HTTP::Request->new( GET => $url ) );
print "Content-type: text/html\n\n";
open( FILE, ">file23.gif" );
binmode( FILE );
print FILE $document->content;
close( FILE );


Вот по идее должен сохранить . Что - то сохраняет , но картинка не получается .. 


Автор: KSURi 26.1.2008, 21:05
Код

#!perl

use LWP::UserAgent;

my $ua = LWP::UserAgent->new(cookie_jar => {});

my $res = $ua->get('http://uo.emilia.net.ua/Reg/index.php'); # получаем куки
die 'request failed' if $res -> is_error;

print 'Cookie: ', $ua -> cookie_jar -> as_string;

$res = $ua->get('http://uo.emilia.net.ua/Reg/img.php', # запрашиваем картинку (с куками)
                ':content_file' => 'picture.gif');
die 'request failed' if $res -> is_error;

Автор: nitr 26.1.2008, 21:23
Всё отлично KSURi, но для куки можно и head использовать, что согласитесь быстрее (зачастую в 10раз)
т.е. 7 строка
Код

my $res = $ua->head('http://uo.emilia.net.ua/Reg/index.php'); # получаем куки
die 'request failed' if $res -> is_error;

Автор: nitr 26.1.2008, 22:09
Кстати, иногда скрипт img.php с того сайта выдает ошибку, поэтому у вас может "не получится" картинка, хотя есть решение - удалить эту ошибку, которая вставляется в picture.gif.

Автор: KSURi 26.1.2008, 22:51
Цитата(nitr @  26.1.2008,  21:23 Найти цитируемый пост)
Всё отлично KSURi, но для куки можно и head использовать, что согласитесь быстрее (зачастую в 10раз)

Да, согласен, так будет гораздо лучше.

Цитата(nitr @  26.1.2008,  22:09 Найти цитируемый пост)
Кстати, иногда скрипт img.php с того сайта выдает ошибку, поэтому у вас может "не получится" картинка, хотя есть решение - удалить эту ошибку, которая вставляется в picture.gif. 

Тоже заметил это: ;<br />
<b>Warning</b>:  Wrong parameter count for imagedestroy() in <b>/opt/lampp/htdocs/Reg/img.php</b> on line <b>9</b><br />
.
Но это не должно влиять на целостность картинки. Данные добавляются в конец файла, заголовок GIF и сама структура рисунка остаются целыми. Текст ошибки скорее всего просто не обрабатывается при построении картинки.
Десять раз подряд запустил скрипт, и 10 раз получил валидную картинку.
Посмотрите "исходный код" гифки в аттаче.

Автор: nitr 26.1.2008, 23:24
30 из 50 - в конце файла picture.gif ошибка 
Цитата(KSURi @  26.1.2008,  22:51 Найти цитируемый пост)
;<br /><b>Warning</b>:  Wrong parameter count for imagedestroy() in <b>/opt/lampp/htdocs/Reg/img.php</b> on line <b>9</b><br />


Я ж верю что работает smile Просто ошибка частая. Так что, надо и это учитывать, автору этой темы ;)

Автор: Str!pe 26.1.2008, 23:49
GeoGeo, http://uo.emilia.net.ua/Reg/img.php вот отсюда и сохраняй, она прекрасно сохраняется.

Автор: nitr 27.1.2008, 00:52
Str!pe, ответ KSURi, был полным smile
Смотрим внимательно на строку 12 smile

Автор: GeoGeo 27.1.2008, 15:02
Всем огромное спасибо .

Ещё один вопрос , куки отлавливать надо один раз ?

Потом при каждом вызове $ua->get("URL"); куки отлавливаются и  передаются автоматически ?
или пере каждым новым запросом надо ловить заново ?

Автор: nitr 27.1.2008, 16:53
Всё будет нормально, т.е. куки будут вставляться при каждом запросе.

Автор: GeoGeo 27.1.2008, 19:41
Можно ли как-то запретить установку новых куки при запросе .

Код примерно такой :
Код

use strict;
use warnings;
use LWP;
use HTTP::Cookies;

my $ua = LWP::UserAgent->new();
$ua->timeout(5);
$ua->agent( "Mozilla/5.0" );
my $cookies = HTTP::Cookies->new();
$ua->cookie_jar($cookies);

$ua->get("URL"); #Тут получили куки....
$ua->get("URL1"); # Вот чтоб тут не ставились куки по новой, а использовались из первого запроса
$ua->get("URL2"); # И тут тоже ... 



 use LWP::Debug qw(+ -conns); - когда подключаю это  , вижу  что куки ставяться при каждом $ua->get

Автор: GeoGeo 27.1.2008, 20:33
Вобще есть ли какая-то возможность сохранить картинку без запроса к img.php ?
картинка ведь отображается на index.php ?

Автор: nitr 27.1.2008, 20:45
Можете временно забыть про ваш ресурс smile Он еще в разработке, часто вылезают ошибки, многие пункты меню "В разработке".

Сейчас вообще:
Цитата
The requested URL /Reg/index.php was not found on this server.


perldoc LWP
Куки должны оставаться теми же, или сами вручную их сохраните.

Добавлено через 9 минут и 3 секунды
Надо использовать куки, которые получены первый раз.

Автор: GeoGeo 27.1.2008, 20:58
 smile 
Как сохранить и потом использовать ? 

Автор: nitr 27.1.2008, 21:25
GeoGeo, автоматически (т.е. это уже реализовано).

Код
код в личке смотрите

Автор: GeoGeo 27.1.2008, 22:39
Премного благодарен !
Разбираюсь.

Автор: GeoGeo 28.1.2008, 18:32
В общем ничего не выходит .
Debug  показывает , Что все как и должно быть .. но в ответ получают , что код не верный .
Прилагаю код .
ф-цию getcode не смотрите - она работает как надо . 
Если интересно , расскажу как работает...
Спасибо.
Код


[Удалено]


Автор: nitr 29.1.2008, 01:19
Вот как были наводящие вопросы, так бы и оставались бы "наводящими". А сейчас видно для чего вы делаете этот скрипт.
Лично - выглядит будущей флудилкой и т.д. и т.п.. Имхо, не приветствуется (по крайне мере в открытую!)

Объясните - для чего вы написали этот "код"?

Автор: GeoGeo 29.1.2008, 02:19
Делаю для себя - изучаю перл .
Прошу помощи , Так как не получается .
В будущем мне могут пригодится подобные маневры ...
Спасибо .

Автор: GeoGeo 29.1.2008, 23:51
никто не подскажет? :(
У меня уже голова пухнет ... 
подскажите где ошибся ?

Автор: nitr 30.1.2008, 00:23
GeoGeo, прочтите perldoc LWP::UserAgent
особенно как посылать POST-запрос!
В остальном вполне верный код, стиль конечно мне не нравится, да и многое можно написать иначе (имхо более правильней), а у вас именно POST-запрос.

Цитата
...
Ок

Автор: GeoGeo 30.1.2008, 19:38
Я учусь , и был бы весьма признателен , если бы вы указали мне на мои ошибки .
Я не прошу готовый код , можно фрагменты , которые , в вашем понимании , написаны не верно .
Спасибо .
С Уважением ...

Автор: nitr 30.1.2008, 21:26
Цитата
ua->post( $url, \%form )
$ua->post( $url, \@form )
$ua->post( $url, \%form, $field_name => $value, ... )
This method will dispatch a POST request on the given $url, with %form or @form providing the key/value pairs for the fill-in form content. Additional headers and content options are the same as for the get() method. 

This method will use the POST() function from HTTP::Request::Common to build the request. See the HTTP::Request::Common manpage for a details on how to pass form content and other advanced features.


Цитата
  POST 'http://www.perl.org/survey.cgi',
       [ name   => 'Gisle Aas',
         email  => '[email protected]',
         gender => 'M',
         born   => '1964',
         perc   => '3%',
       ];


->post($url, [ $param1 => $value1, $param2 => $value2])

Автор: GeoGeo 31.1.2008, 17:50
Спасибо огромное , с постом разобрался .
Код удалил , чтоб не использовали в злых целях smile

Автор: nitr 1.2.2008, 22:02
GeoGeo, рад был помочь и рад, что вы удалили код smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)