0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 11

Избавление от заголовков ответа сервера

23.05.2016, 21:00. Показов 718. Ответов 3
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
здравствуйте, у меня есть функция получения данных по url:
C++
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
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
static char* OpenURL(char *url) {
    WSADATA lpWSAData;
    SOCKET s;
 
    // Проверим на правильность введенный адрес.
    // Он должен начинаться с "http://"
    if (memcmp(url,"HTTP://",7)!=0 && memcmp(url,"http://",7)!=0) return(NULL);
    url+=7;
 
    // Инициализация библиотеки Ws2_32.dll.
    if (WSAStartup(MAKEWORD(1,1),&lpWSAData)!=0) return(NULL);
 
 
    // Получим имя хоста, номер порта и путь ----------------------------
 
    char *http_host=strdup(url); // Имя хоста (HTTP_HOST)
    int port_num=80;             // Номер порта по умолчанию (HTTP_PORT)
    char *http_path=NULL;        // Путь (REQUEST_URI)
 
    char *pch=strchr(http_host,':');
    if (!pch) {
        pch=strchr(http_host,'/');
        if (pch) {
            *pch=0;
            http_path=strdup(pch+1);
            }
        else http_path=strdup("");
        }
    else {
        *pch=0;pch++;
        char *pch1 = strchr(pch,'/');
        if (pch1) {
            *pch1=0;
            http_path=strdup(pch1+1);
            }
        else http_path=strdup("");
 
        port_num = atoi(pch);
 
        if (port_num==0) port_num = 80;
        }
 
    // Поучаем IP адрес по имени хоста
    struct hostent* hp;
    if (!(hp=gethostbyname(http_host))) {
        free(http_host);
        free(http_path);
        return(NULL);
        }
 
    // Открываем сокет
    s=socket(AF_INET, SOCK_STREAM, 0);
    if (s==INVALID_SOCKET) {
        free(http_host);
        free(http_path);
        return(NULL);
        }
 
    // Заполняем структуру sockaddr_in
    struct sockaddr_in ssin;
    memset ((char *)&ssin, 0, sizeof(ssin));
    ssin.sin_family = AF_INET;
    ssin.sin_addr.S_un.S_un_b.s_b1 = hp->h_addr[0];
    ssin.sin_addr.S_un.S_un_b.s_b2 = hp->h_addr[1];
    ssin.sin_addr.S_un.S_un_b.s_b3 = hp->h_addr[2];
    ssin.sin_addr.S_un.S_un_b.s_b4 = hp->h_addr[3];
    ssin.sin_port = htons(port_num);
 
    // Выводим IP адрес хоста, с которым будем соединятся
    printf("Conecting to...",(unsigned char)hp->h_addr[0],
                                         (unsigned char)hp->h_addr[1],
                                         (unsigned char)hp->h_addr[2],
                                         (unsigned char)hp->h_addr[3]);
 
    // Соединяемся с хостом
    if (connect(s, (sockaddr *)&ssin, sizeof(ssin))==-1) {
        free(http_host);
        free(http_path);
        printf("Error\n");
        return(NULL);
        }
    printf("Ok\n");
 
    // Формируем HTTP запрос
    char *query=(char*)malloc(2048);
 
    strcpy(query,"GET /");
    strcat(query,http_path);
    strcat(query," HTTP/1.0\nHost: ");
    strcat(query,http_host);
    strcat(query,"\nUser-agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)");
    strcat(query,"\nAccept: */*\n\n");
 
 
    // Выводим HTTP запрос
    printf("%s",query);
 
    // Отправляем запрос серверу
    int cnt=send(s,query,strlen(query),0);
 
    // Освобождаем память
    free(http_host);
    free(http_path);
    free(query);
 
    // Проверяем, не произошло ли ошибки при отправке запроса на сервер
     if (cnt==SOCKET_ERROR) return(NULL);
 
    cnt=1;
 
    // Получаем ответ с сервера ---------------------------------
 
    int size=1024*1024; // 1Mb
    char *result=(char*)malloc(size);
    strcpy(result,"");
    char *result_ptr=result;
 
    while (cnt!=0 && size>0) {
        cnt=recv (s, result_ptr, sizeof(size),0);
        if (cnt>0) {
            result_ptr+=cnt;
            size-=cnt;
            }
        }
    *result_ptr=0;
 
    // Деинициализация библиотеки Ws2_32.dll
    WSACleanup();
 
    return(result);
    }
но вот только возвращает она данные вместе с заголовками ответа сервера:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
HTTP/1.1 200 OK
Server: nginx/1.8.0
Date: Mon, 23 May 2016 16:19:50 GMT
Content-Type: text/plain
Content-Length: 13
Last-Modified: Mon, 23 May 2016 16:06:48 GMT
ETag: "57432a98-d"
Expires: Sun, 12 Jun 2016 16:19:50 GMT
Cache-Control: max-age=1728000
Accept-Ranges: bytes
Age: 6013
X-Cache: HIT from bnat
X-Cache-Lookup: HIT from bnat:3130
Via: 1.1 bnat (squid/3.4.13)
Connection: close
 
Hello Word
как сделать так, чтоб все лишнее убралось и осталось лишь "Hello Word" (это и есть содержимое веб страницы, к которой идет запрос)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.05.2016, 21:00
Ответы с готовыми решениями:

Кодировка заголовков ответа сервера (301)
Здравствуйте! Использую CentOS 6.5 с Apache. Проблема в следующем: кодировка всех страниц сайта в UTF-8, однако кодировка заголовков,...

Скачать файл с сервера с подменой заголовков
Добрый вечер. Необходимо скачать файл с другого сервера на свой сервер с подменой заголовков http, дело в том, что ни с браузера ни с...

Эмуляция ответа сервера
Здравствуйте уважаемые господа. Уверен, что вы сталкивались с подобными сообщениями. Суть такая: 1.) Есть программа, которая...

3
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.05.2016, 21:06
Находишь первую пустую строку в буфере, сразу за ней идет тело HTTP.
Например, можно использовать методы find и substr класса std::string.
0
0 / 0 / 0
Регистрация: 26.04.2015
Сообщений: 11
23.05.2016, 21:21  [ТС]
Убежденный, а можно пример, если не сложно?
0
Ушел с форума
Эксперт С++
 Аватар для Убежденный
16481 / 7444 / 1187
Регистрация: 02.05.2013
Сообщений: 11,616
Записей в блоге: 1
23.05.2016, 21:31
C++
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
#include <string>
#include <cstdio>
 
int main()
{
    using namespace std;
 
    string const Response =
        "HTTP/1.0 200 OK\r\n"
        "Content-Length: 5\r\n"
        "Content-Type: text/plain;charset=utf-8\r\n"
        "Connection: close\r\n"
        "\r\n"
        "hello"
        ;
 
    string::size_type const Pos = Response.find("\r\n\r\n");
    if ( (Pos != string::npos) && (Pos != (Response.length() - 4)) )
    {
        string const Body = Response.substr(Pos + 4);
        printf("%s", Body.c_str());
    }
 
    return 0;
}
> hello
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
23.05.2016, 21:31
Помогаю со студенческими работами здесь

Ожидание ответа от сервера
Клиент1 шлет серверу запрос, в котором содержатся координаты. Координаты заносятся в БД на поле. Клиент2 шлет серверу тот же запрос, но с...

Код ответа от сервера
В двух словах нужно на C# сделалать прогу для анализа битых ссылок. Для уточнения битые ссылки будут проверяться только для скачивания...

Ожидание ответа от сервера
Здрастуйте, у меня такой вопрос например я отправляю POST запрос вот таким вот образом: secondStepForm = &quot;Rquesbody&quot;; ...

Кодировка ответа сервера
Здравствуйте, столкнулся с такой проблемой: через https посылаю post запрос, обрабатываю его: HttpWebResponse response =...

Обработка ответа сервера
Добрый день, есть аякс форма которая отправляет данные и получает ответы от сервера. Ответы типа...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
Опции темы

Новые блоги и статьи
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru