Всем добрый день! Вот желаю написать программку для скачивания с серверов файлов по желаемому списку, но что-то не особо получается, виснет на этапе чтения сокета, при этом подключается нормально. Просьба особо не бить, в С новичек. На данный момент там используется буфер по BUFSIZ, то есть более этого размера не скачает, но меня сейчас не это волнует...
Кроме этого, мне непонятно, если сервер требует авторизации — как быть с этим?
Использую реальные ссылки (программой читаются из файла ulist, в нем первая строка — пример использования логина/пароля, но данные ссылки их не должны на сервере требовать):
Здравствуйте, Иван, Вы писали:
И>Всем добрый день! Вот желаю написать программку для скачивания с серверов файлов по желаемому списку, но что-то не особо получается, виснет на этапе чтения сокета, при этом подключается нормально. Просьба особо не бить, в С новичек. На данный момент там используется буфер по BUFSIZ, то есть более этого размера не скачает, но меня сейчас не это волнует...
Э-э… А где ты запрос в сокет пишешь?! "GET /uri HTTP/1.1\nHost: www.some.host" или что-то вроде?
И>Кроме этого, мне непонятно, если сервер требует авторизации — как быть с этим?
Выкинуть велосипед и использовать libcurl. А лучше, перейти на более другой язык — зачем тебе C для такой задачи? Например, так:
use Net::HTTP;
my $s = Net::HTTP->new(Host => "www.perl.com") || die $@;
$s->write_request(GET => "/", 'User-Agent' => "Mozilla/5.0");
my($code, $mess, %h) = $s->read_response_headers;
while(1)
{
my $buf;
my $n = $s->read_entity_body($buf, 1024);
die"read failed: $!"unless defined $n;
last unless $n;
print $buf;
}
Учу исключительно (!) для обучения С (чистому). Я вполне могу пользоваться wget или виндовым GetRight.
C++, также как сторонние библиотеки, просьба не предлагать.
Да пребудет в нами С-ла!
Re[2]: Не могу скачать файл через Интернет (сокеты)
Здравствуйте, Иван, Вы писали:
И>Учу исключительно (!) для обучения С (чистому). Я вполне могу пользоваться wget или виндовым GetRight. И>C++, также как сторонние библиотеки, просьба не предлагать.
Тогда отправь в сокет HTTP-запрос, потому что в твоей программе этого не наблюдается.
До последнего не верил в пирамиду Лебедева.
Re[2]: Не могу скачать файл через Интернет (сокеты)
Здравствуйте, Иван, Вы писали:
И>Учу исключительно (!) для обучения С (чистому). Я вполне могу пользоваться wget или виндовым GetRight. И>C++, также как сторонние библиотеки, просьба не предлагать.
Для лучшего понимания HTTP протокола можешь запустить уже собранный curl с ключем -v
что-то типа: curl -v ya.ru, посмотришь как формируется HTTP запрос