| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Программирование под Unix/Linux > Просто загрузить и вывести txt файл по http |
| Автор: Валерия 25.4.2008, 21:13 | ||
Интересует аналог
На C++ © Под никсы. |
| Автор: bilbobagginz 25.4.2008, 21:22 |
| если вопрос о програмном перекаче - выбирается нужная библиотека, и на ней катаешься. напр. libcurl (она на C, но есть какая-то бета для C++ - curlcpp ) если просто командой нужно притащить файл, смотри следующий совет. |
| Автор: JackYF 25.4.2008, 21:23 |
| netcat Добавлено через 17 секунд `wget <url> -O-` |
| Автор: Валерия 25.4.2008, 21:37 |
| А из чегото стандартного, что бы не ставить дополнительно библиотек? |
| Автор: Валерия 25.4.2008, 22:06 |
| Спасибо Та формирывать мне влень, просто со сниффера http заголовков скопирую, уже fsockopen/fputs/fgets в php юзала А можно примерчик или сцылочку?) А то я находила максимум как просто подсоедениться кудато на какойто айпи и порт и всё) |
| Автор: bilbobagginz 25.4.2008, 22:20 |
качай libcurl, и там есть примерчиков по самое не хочу. также есть программка wget, её сорс тоже можно скачать (open source) |
| Автор: MAKCim 25.4.2008, 22:26 | ||
|
| Автор: Валерия 25.4.2008, 23:51 | ||
Делаю так.
Но всё зависает нафик, причем если не делаю read то норм заканчиваеться. Т.е не выходит вытянуть ответ. |
| Автор: MAKCim 26.4.2008, 00:22 | ||
Валерия,
|
| Автор: Валерия 26.4.2008, 01:25 |
| Спасибо, я до этого использовала сайз оф А какая функция альтернативы feof для сокетов? Т.е мне нужно в буфер забрасывать по 4096 пока не дойдет до конца |
| Автор: MAKCim 26.4.2008, 09:33 | ||
read() возвращает 0
в рамках одного HTTP-запроса? |
| Автор: GrayCardinal 26.4.2008, 16:30 |
| Валерия, Для сокетов лучше юзать send/recv Добавлено через 10 минут и 17 секунд Далее. Нельзя писать ВЕСЬ буфер. Нужно посчитать длину строки (strlen) и записывать полученное количество байт. Плюс я ещё бы добавил shutdown, но это на любителя... Добавлено через 13 минут и 27 секунд Да, ещё, для HTTP/1.1 простого чтения ответа недостаточно. Там есть такая вещь, как "кусочковая передача" (извините, не знаю как по-русски "chunked" |
| Автор: Валерия 26.4.2008, 21:53 |
да. чем лучше? |
| Автор: MAKCim 26.4.2008, 22:19 | ||
|
| Автор: GrayCardinal 27.4.2008, 12:38 |
| Валерия, Тем что они для этого предназначены |
| Автор: Валерия 27.4.2008, 14:35 |
| Так что поповоду того что бы вывести не 4096 байт а все? Даже если я подряд пишу несколько раз read - выводит одно и тоже, заголовок и кусочек html |
| Автор: MAKCim 27.4.2008, 16:37 | ||
|
| Автор: Валерия 27.4.2008, 19:49 |
| Разобралась, всем спасибо, особенно MAKCim)) Еще такой вопрос в догонку, если я не знаю сколько будет весить страничка, то что бы не выделять сильно много буфера, как при каждом записывании n байт в него, всё время увеличивать значение all? |
| Автор: MAKCim 27.4.2008, 20:19 | ||
что за all? что за буфер? |
| Автор: Валерия 27.4.2008, 21:19 | ||
Упс, я до этого сообщение набрала что не получалось, но потом сама разобралась и не отправила
Так вот, если я пишу all[100000] то выделяет 100 кб под это дело, а мне нужно что бы переменная all по мере забития в неё bufer2 постоянно увеличивалась) Да и оператор new не пашет( Для него подключать нужно что то? И вообще, лучше всего киньте ссылкой на е-книгу на русском по программингу под линукс, а то я раньше писала под dos на турбо си, так не всё катит здесь что катило там... |
| Автор: MAKCim 28.4.2008, 09:02 | ||||
обязательно все данные записывать в массив? можно по мере их поступления осуществлять вывод да ну? используй malloc() и связный список буферов
воспользуйся поиском, не раз тема поднималась |
| Автор: GrayCardinal 28.4.2008, 09:47 | ||
| Валерия, 1. В данном случае нельзя юзать strcat 2. Да и оператор new не пашет Скорее всего используется gcc (Си компилер), вместо g++ (Си++ компилер). 3 Так вот, если я пишу all[100000] то выделяет 100 кб под это дело, а мне нужно что бы переменная all по мере забития в неё bufer2 постоянно увеличивалась) Кто мешает написать примитивную функтяру изменения размера с сохранением данных ? Я, правда, в данном случае (HTTP GET) просто использовал временный файл.
Тоже вариант. |
| Автор: GrayCardinal 28.4.2008, 11:11 |
| ЗЫ код возврата системных вызовов лучше всё-таки проверять |
| Автор: Валерия 28.4.2008, 18:03 | ||
| Спасибо Тут кстати проблемка возникла:
Работает но с багом, если страница больше 4х килобайт, то последний блок два раза запишет в big. Добавлено через 5 минут и 39 секунд И кстати, есть под си какаято библиотека с нормальной работой строк? Ну тоесть string mystr; string s="dddd"; mystr = "abb" + s + "bbb"; типа такого) |
| Автор: MAKCim 28.4.2008, 18:20 | ||||
на каждой итерации нужно записывать в big size байт
|
| Автор: JackYF 28.4.2008, 19:52 |
в Си нет объектов и перегрузки операторов |
| Автор: kirjanov 28.4.2008, 21:15 |
А поименованную область памяти в C можно назвать объектом?) string можно и через препроцессор сделать, а вместо '+' макрос добавить с подходящим именем |
| Автор: quasi 6.5.2008, 13:21 |
| А как получить файлики определенного типа, например графические gif. jpg, png... etc Т.е. всю страничку не нужно, нужно только файлики нттп запросом, подскажите?! |