Модераторы: xvr

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Просто загрузить и вывести txt файл по http 
:(
    Опции темы
Валерия
Дата 25.4.2008, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Интересует аналог
Код

<?
readfile("http://ya.ru");
?>

На C++ ©
Под никсы.
PM MAIL   Вверх
bilbobagginz
Дата 25.4.2008, 21:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



если вопрос о програмном перекаче - выбирается нужная библиотека, и на ней катаешься. напр. libcurl (она на C, но есть какая-то бета для C++ - curlcpp )
если просто командой нужно притащить файл, смотри следующий совет.





--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
JackYF
Дата 25.4.2008, 21:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 3
Всего: 162



netcat

Добавлено через 17 секунд
`wget <url> -O-`


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
Валерия
Дата 25.4.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



А из чегото стандартного, что бы не ставить дополнительно библиотек?
PM MAIL   Вверх
MAKCim
Дата 25.4.2008, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  25.4.2008,  21:37 Найти цитируемый пост)
А из чегото стандартного, что бы не ставить дополнительно библиотек? 

а из стандартного только сокеты домена AF_INET типа SOCK_STREAM
но в этом случае тебе будет нужно самой формировать HTTP-запрос


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 25.4.2008, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Спасибо smile
Та формирывать мне влень, просто со сниффера http заголовков скопирую, уже fsockopen/fputs/fgets в php юзала smile
А можно примерчик или сцылочку?)
А то я находила максимум как просто подсоедениться кудато на какойто айпи и порт и всё)

Это сообщение отредактировал(а) Валерия - 25.4.2008, 22:07
PM MAIL   Вверх
bilbobagginz
Дата 25.4.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Naughtius Maximus
****


Профиль
Группа: Экс. модератор
Сообщений: 8813
Регистрация: 2.3.2004
Где: Israel

Репутация: 4
Всего: 317



Цитата(Валерия @  25.4.2008,  22:06 Найти цитируемый пост)
А можно примерчик или сцылочку?)

качай libcurl, и там есть примерчиков по самое не хочу.
также есть программка wget, её сорс тоже можно скачать (open source)




--------------------
Я ещё не демон. Я только учусь.
PM WWW   Вверх
MAKCim
Дата 25.4.2008, 22:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  25.4.2008,  22:06 Найти цитируемый пост)
А можно примерчик или сцылочку?)

Код

struct sockaddr_in addr;
struct hostent * hostent;
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
hostent = gethostbyname("ya.ru");
addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));
/* формируем HTTP-запрос в buffer */
char buffer[4096];
size_t size;
...
write(socket_fd, buffer, size); /* запрос */
read(socket_fd, buffer, 4096); /* получение ответа */




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 25.4.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Делаю так.
Код

    #include <stdio.h>
    #include <stdlib.h>
    #include <errno.h>
    #include <netdb.h>
    #include <sys/types.h>
    #include <sys/socket.h>
    #include <netinet/in.h>
    #include <arpa/inet.h>



int main(){
 

struct sockaddr_in addr;
struct hostent * hostent;
int socket_fd = socket(AF_INET, SOCK_STREAM, 0);
addr.sin_family = AF_INET;
addr.sin_port = htons(80);
hostent = gethostbyname("ya.ru");
addr.sin_addr.s_addr = *(u_int32_t*)hostent -> h_addr;
connect(socket_fd, (const struct sockaddr*)&addr, sizeof(struct sockaddr_in));

char buffer[4096] = "GET / HTTP/1.1\r\nHost: ya.ru\r\nUser-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5\r\nAccept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3\r\nAccept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7\r\nKeep-Alive: 300\r\nConnection: keep-alive\r\nIf-Modified-Since: Thu, 20 Mar 2008 15:25:24 GMT\r\nCache-Control: max-age=0\r\n\r\n";
char buffer2[4096];

write(socket_fd, buffer, 4096);
read(socket_fd, buffer2, 4096);
printf("%s", buffer2);

return 0;
}

Но всё зависает нафик, причем если не делаю read то норм заканчиваеться. Т.е не выходит вытянуть ответ.

Это сообщение отредактировал(а) Валерия - 25.4.2008, 23:52
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 00:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Валерия, 
Код

write(socket_fd, buffer, strlen(buffer));
read(socket_fd, buffer2, 4096);
printf("%s", buffer2);




--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Валерия
Дата 26.4.2008, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Спасибо, я до этого использовала сайз оф
А какая функция альтернативы feof для сокетов?
Т.е мне нужно в буфер забрасывать по 4096 пока не дойдет до конца
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 09:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  26.4.2008,  01:25 Найти цитируемый пост)
А какая функция альтернативы feof для сокетов?

read() возвращает 0
Цитата(Валерия @  26.4.2008,  01:25 Найти цитируемый пост)
Т.е мне нужно в буфер забрасывать по 4096 пока не дойдет до конца 

в рамках одного HTTP-запроса?


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 26.4.2008, 16:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



Валерия, 
Для сокетов лучше юзать send/recv

Добавлено через 10 минут и 17 секунд
Далее.
Нельзя писать ВЕСЬ буфер. Нужно посчитать длину строки (strlen) и записывать полученное количество байт. Плюс я ещё бы добавил shutdown, но это на любителя...

Добавлено через 13 минут и 27 секунд
Да, ещё, для HTTP/1.1 простого чтения ответа недостаточно. Там есть такая вещь, как "кусочковая передача" (извините, не знаю как по-русски "chunked" smile )

Это сообщение отредактировал(а) GrayCardinal - 26.4.2008, 16:37


--------------------
PM MAIL WWW   Вверх
Валерия
Дата 26.4.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 598
Регистрация: 10.3.2007

Репутация: нет
Всего: 8



Цитата(MAKCim @  26.4.2008,  09:33 Найти цитируемый пост)
в рамках одного HTTP-запроса?

да.
Цитата(GrayCardinal @  26.4.2008,  16:30 Найти цитируемый пост)
Для сокетов лучше юзать send/recv

чем лучше?
PM MAIL   Вверх
MAKCim
Дата 26.4.2008, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



Цитата(Валерия @  26.4.2008,  21:53 Найти цитируемый пост)
да.

Код

int flags = MSG_MORE;
while (1) {
    if (<все передали>)
        break;
    send(socket_fd, <данные>, <размер данных>, flags);
    if (<осталось вызвать send один раз>)
        flags = 0;
}





--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0608 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.