SASGIS

Веб-картография и навигация

Программное скачивание файлов по http протоколу

Обсуждение около-картографических и прочих программ и тем, напрямую не связанных с SAS.Планета

Модератор: Tolik

Программное скачивание файлов по http протоколу

Сообщение DJ VK » 20 май 2014, 08:24

Заранее прошу прощения, что тема немного шире рамок картографии.
Требуется консультация по работе с HTTP.

Скачивание файла методом GET.
IdHTTP1->Get("http://www.dyndns.com/")
Никаких вопросов, все работает.

Но столкнулся с другим случаем. Отдельно грузится страница, затем отдельно список файлов, методом POST.

Код: Выделить всё
GET /project/akademiya_zanimatelnyh_nauk_fizika/video/ HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; YB/3.5.1) Presto/2.12.388 Version/12.15
Host: radostmoya.ru
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/webp, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru,en;q=0.9,ru-RU;q=0.8
Accept-Encoding: gzip, deflate
Cookie: symfony=1eg8sf379kj8kd6roh7uu8j7l6; showBannerDobroeslovoC9=no; __utma=117324677.183314143.1400554977.1400554977.1400554977.1; __utmb=117324677.4.10.1400554977; __utmc=117324677; __utmz=117324677.1400554977.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Connection: Keep-Alive

HTTP/1.1 200 OK
Server: nginx
Date: Tue, 20 May 2014 03:13:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 9827
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip

POST /project/akademiya_zanimatelnyh_nauk_fizika/video/?list HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 6.1; WOW64; YB/3.5.1) Presto/2.12.388 Version/12.15
Host: radostmoya.ru
Accept-Language: ru,en;q=0.9,ru-RU;q=0.8
Accept-Encoding: gzip, deflate
Cookie: symfony=1eg8sf379kj8kd6roh7uu8j7l6; showBannerDobroeslovoC9=no; __utma=117324677.183314143.1400554977.1400554977.1400554977.1; __utmb=117324677.4.10.1400554977; __utmc=117324677; __utmz=117324677.1400554977.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none)
Connection: Keep-Alive
Content-Length: 18
Accept: */*
X-Requested-With: XMLHttpRequest
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
sort=&order=&mode=  это походу контент

sort=&order=&mode=
HTTP/1.1 200 OK
Server: nginx
Date: Tue, 20 May 2014 03:13:08 GMT
Content-Type: text/html; charset=utf-8
Content-Length: 6096
Connection: keep-alive
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Vary: Accept-Encoding
Content-Encoding: gzip


Чем можно сэмулировать такой вот запрос на сайт? подскажите параметры, ни в какую список не скачивается.
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 300 раз.

Re: Программное скачивание файлов по http протоколу

Сообщение Tolik » 20 май 2014, 10:38

wget пробовали?
Tolik
Гуру
 
Сообщения: 2603
Зарегистрирован: 28 янв 2011, 10:38
Благодарил (а): 277 раз.
Поблагодарили: 515 раз.

Re: Программное скачивание файлов по http протоколу

Сообщение zed » 20 май 2014, 11:45

Using Indy idHTTP to post binary and text (второй пример - Solve 2).
zed
Гуру
 
Сообщения: 2888
Зарегистрирован: 16 авг 2008, 20:21
Благодарил (а): 89 раз.
Поблагодарили: 525 раз.

Re: Программное скачивание файлов по http протоколу

Сообщение Parasite » 21 май 2014, 08:25

DJ VK писал(а):Скачивание файла методом GET.

А вообще задача в чем заключается? Пишется "ради интересу" своя качалка, или просто нужно разово выкачать тот сайтик что в логах выше светится?
Если второе - тот может лучше взять уже готовые программы?
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 459 раз.

Re: Программное скачивание файлов по http протоколу

Сообщение DJ VK » 21 май 2014, 13:58

Parasite писал(а): нужно разово выкачать тот сайтик что в логах выше светится?

Ну сайтики по той или иной тематике я часто скачиваю. Обычно телепорт помогает. Но тут довольно изощренная система хранения списка файлов. С нахрапу не получилось. В принципе хэндикэш кеширует листы видеороликов, и Сайт уже качается конечно дома. Обошелся 2 скриптами на с++ и 90 дабл-кликами (открыл составленный список ссылок в браузере, дальше, когда списки роликов в кэше - дело техники).
Я впервые на небольшом сайтике (не будем обсуждать всевозможных гигантов вроде ютюба или музыкального сайта - им по статусу положено иметь серъезную защиту) столкнулся с невозможность скачать файлик вроде бы зная его конкретный адрес. Вместо него качается базовый HTML. Поэтому в целях повышения самообразования (для последующих скриптиков и программ) решил обсудить возможные методы моделирования запросов.
Люди у нас матерые, даже капчу на G-G-C кто-то сломал помнится...
пробовал инди
Код: Выделить всё
TStringStream* Txt=new TStringStream("");
  Htt->Request->ContentType= "application/x-www-form-urlencoded";
  TFileStream* FS = new TFileStream("2.html", fmCreate | fmOpenWrite);
  Txt->WriteString(URLEncode("sort=&"));
  Txt->WriteString(URLEncode("order=&"));
  Txt->WriteString(URLEncode("mode="));

  Htt->Post("http://radostmoya.ru/project/akademiya_zanimatelnyh_nauk_fizika/video/?list",Txt,FS);
  delete FS;
  delete Txt;

получил 404 :lol:

будет время, попробую RAD XE6, там инди куки поддерживает

WGET как то пробовал, запрос от него в определенных случаях отличался от оригинального, (уже не помню почему, он вроде то ли пихал что-то лишнее, то ли не понимал ответ с определенным полем)
Аватара пользователя
DJ VK
Гуру
 
Сообщения: 1468
Зарегистрирован: 16 апр 2009, 13:57
Откуда: 8 км. от МКАД
Благодарил (а): 82 раз.
Поблагодарили: 300 раз.

Re: Программное скачивание файлов по http протоколу

Сообщение Parasite » 21 май 2014, 16:43

DJ VK писал(а):Обошелся 2 скриптами на с++

Ой. :)

DJ VK писал(а):ютюба или музыкального сайта - им по статусу положено иметь серъезную защиту)

А на тытрубе появилась какая-то защита?

DJ VK писал(а):столкнулся с невозможность скачать файлик вроде бы зная его конкретный адрес.

Конкретный адрес - далеко не всё, чем обмениваются клиент и сервер.
Есть еще куки, сессии, хитрые порты, и даже протоколы (в т.ч.и потоковые - привет видео\аудиосервисам, некоторые из них - закрытые и проприетарные), и прочая и прочая...

DJ VK писал(а):будет время, попробую RAD XE6, там инди куки поддерживает

Осспаде. Из мортиры, да по скворцам...

Попробуйте Perl - качает файлы "из коробки" что с куками что с сессиями*, и качалка Вашего случая займет от силы десяток-другой весьма тупеньких строк типа таких:
Код: Выделить всё
   $socket=IO::Socket::INET->new( PeerAddr => $http_server, PeerPort => $http_port, Proto => "tcp", Timeout => 30) or die;
   print $socket "GET $file HTTP/1.0\n";
   print $socket $http_accept;
   print $socket "Cache-Control: no-cache, no-store\n";
   print $socket $http_agent;
   print $socket $http_host;
   print $socket $http_connection;
   print $socket "\r\n";

...и даже рисовать кнопочки и совершенно ничего компилировать не надо! :)

--
* - если руки на месте, разумеется
The only difference between me and a mad man is that I am not mad. /Salvador Dali/
Изображение
Аватара пользователя
Parasite
Администратор
 
Сообщения: 5646
Зарегистрирован: 23 окт 2008, 17:38
Благодарил (а): 124 раз.
Поблагодарили: 459 раз.


Вернуться в Болталка

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3