Автор Тема: Закачать файл С http - как?  (Прочитано 7659 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Grundic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« : 04 Ноября 2005, 17:19:41 »
Надо по крону ежедневно заливать себе на сайт файл с дружественного HTTP.
По крону - сейчас сижу мануалю. :)
А вот как закачать к себе в какую-нить /dat файл с другого сайта?

Заранее сэнькс всем сочувствующим. (:
« Последнее редактирование: 07 Ноября 2005, 16:47:45 от Grundic »
Ибо нефиг! =)

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Закачать файл С http - как?
« Ответ #1 : 04 Ноября 2005, 17:50:19 »
Возможно, подойдет [p]file_get_contents[/p]
Либо объясните, что за файл.

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачать файл С http - как?
« Ответ #2 : 04 Ноября 2005, 18:31:15 »
hanslinger
Это в perl6 появилась такая функция?

Grundic
perldoc LWP
man wget
The documentations is your friend

Оффлайн hanslinger

  • H2Oer
  • Ветеран
  • *****
  • Сообщений: 1148
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.orava.ru
Закачать файл С http - как?
« Ответ #3 : 04 Ноября 2005, 19:15:00 »
NeoNox
тьфу ты =)

Оффлайн Kleyster

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #4 : 06 Ноября 2005, 12:19:33 »

#!/usr/bin/perl

use Socket;
use IO::Handle;
use strict;

my ($h, $p, $r, $d, $cz, $ltg, $tr, $buf);
my $u = shift or die "specifu url.\\n"; # берём урл из параметров скрипта
my $f = shift or die "specify output file.\\n"; # берём выходной файл отуда же

open(F, ">$f") or die "file."; # открываем выходной файл на чтение

$p = 80; # порт по умолчанию
$r = "/"; # ури по умолчанию

$u =~ s/http\\:\\/\\///; # удаляем из урла лишнее (лишнее для данного скрипта, конечно =))

($h, $p, $r)= ($u=~ m#([^/:]*):?([^/]*)(/.*)?$#i); # парсим так, что вид урла может иметь вид
# [url]www.url.com:8080/dir/page.html?params=value[/url] etc. то есть имеется возможность задать порт
$p = ($p || 80) ; # думаю ясно
$r = ($r || "/") ; # тоже

socket(S,AF_INET,SOCK_STREAM,getprotobyname("tcp")) or die "$!\\n"; # создаём сокет
connect(S,sockaddr_in($p,inet_aton($h))) or die "$!\\n"; # конектимся
S->autoflush(1);

print S "GET $r HTTP/1.1\\r\\nHOST: $h\\r\\n\\r\\n"; шлём GET запрос для сервера, поддерживающего HTTP 1.1

my $ih = 1; #
my ($rp, %hv, $vn, $v);

while ($d = ) { #читаем ответ сервера. Значения из HTTP заголовка заносим в хэш %hv (header values)
    if ($d =~ /^\\015?\\012/) {
        last;
    }
    else {
        if ($ih == 1) {
            $rp = (split(/ /, $d))[1];
            $ih = 2;
        }
        else {

            ($vn, $v) = $d =~ /(.+?):(.+?)\\r?\\n/;
            $hv{$vn} = $v;

        }
    }
}
if ($hv{\'Transfer-Encoding\'} =~ /chunked/i) { #если параметр HTTP Transfer-Encoding = chunked, то  данные читаем
#способом номер раз =) подробнее в RFC
    while ($cz = hex() ) {
        $ltg = $cz ;
            while ($ltg && ($tr = read(S, $d, $ltg)) ) {
                    print F $d;
                    $ltg -= $tr ;
            }
            defined($tr) || die "$!" ;
            $_= ;
    }
}
elsif ($hv{\'Content-Length\'}) { # иначе и определён параметр Content-Length номер два =) подробнее там же
    $ltg = $hv{\'Content-Length\'};
    while ($ltg && ($tr = read(S, $d, ($ltg > 16384)?16384:$ltg))) {
        print F $d;
        $ltg-= $tr ;
    }
    defined($tr) || die "$!" ;
    $ltg && die "Not all data.\\n";
} else { # иначе просто читаем данные по 16384 байт =)
    print F $_ while read(S, $_, 16384) ;
}
close S;
# конец =)
« Последнее редактирование: 06 Ноября 2005, 19:15:06 от Kleyster »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачать файл С http - как?
« Ответ #5 : 06 Ноября 2005, 15:27:45 »
Kleyster
Постарайся обьяснить что этот код делает, иначе это медвежья услуга. Тем более, что не понятно что за тип данных собирается закачивать человек.

Кстати, есть IO::Socket::INET на нем этот код будет в четыре раза короче.
The documentations is your friend

Оффлайн Kleyster

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #6 : 06 Ноября 2005, 19:15:22 »
добавил комментарии, а вообще скрипт берёт урл из параметра один ($ARGV[0]) и выходной файл из параметра два ($ARGV[1]) и скачивает данные по этому урлу в аутпут файл =) протокол только HTTP, урл может иметь вид http://host.com:8080/url/url.html?params=value&other=blah
прошу прощения за имена переменных =) варианта с более длинными к сожалению не осталось =)

Оффлайн Grundic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #7 : 07 Ноября 2005, 11:03:19 »
Господа, прошу прощения за тормозной ответ.
Файл для закачки - это xls.

Сейчас сижу рюхаю посты. Спасибо за помощь. :) Если кто чего еще - буду благодарен. :))

ЗЫ: кстати, а как xls распознавать перлом - надо поиск по ячейкам организовать (выводить строку ячеек, содержащюю заданный контент)? :))
Ибо нефиг! =)

Оффлайн Kleyster

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #8 : 07 Ноября 2005, 13:07:45 »
посмотри этот модуль
http://search.cpan.org/search?query=Spreadsheet&mode=all

Оффлайн Grundic

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 3
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #9 : 07 Ноября 2005, 16:46:05 »
Господа, всем спасибо. Решил проблему просто и не принужденно. :))

Кому надо - решил проблему так:
exec "wget -O [куда-что] [http://откуда-что]";
или
exec "fetch -o [куда-что] [http://откуда-что]";

Тупо и просто. (:
Ибо нефиг! =)

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачать файл С http - как?
« Ответ #10 : 07 Ноября 2005, 16:46:29 »
Kleyster Задачу читал?
The documentations is your friend

Оффлайн Kleyster

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #11 : 07 Ноября 2005, 20:12:00 »
читал, что не так? чем отличается от его решения через exec, прошу прощения? или я всё ещё не догоняю?
как я понял, ему нужно слить с файл по http с какого-то сервака

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачать файл С http - как?
« Ответ #12 : 07 Ноября 2005, 20:19:05 »
Kleyster Что делает семейство модулей Spreadsheet?
The documentations is your friend

Оффлайн Kleyster

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 8
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Закачать файл С http - как?
« Ответ #13 : 07 Ноября 2005, 20:37:44 »
Цитировать

ЗЫ: кстати, а как xls распознавать перлом - надо поиск по ячейкам организовать (выводить строку ячеек, содержащюю заданный контент)? )


человек спросил

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Закачать файл С http - как?
« Ответ #14 : 07 Ноября 2005, 20:46:16 »
Тфу, блин. Проглядел. Извини.
The documentations is your friend

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28