ANTICHAT.XYZ    VIDEO.ANTICHAT.XYZ    НОВЫЕ СООБЩЕНИЯ    ФОРУМ  
Баннер 1   Баннер 2
Antichat снова доступен.
Форум Antichat (Античат) возвращается и снова открыт для пользователей. Здесь обсуждаются безопасность, программирование, технологии и многое другое. Сообщество снова собирается вместе.
Новый адрес: forum.antichat.xyz
Вернуться   Форум АНТИЧАТ > Программирование > С/С++, C#, Delphi, .NET, Asm
   
Ответ
 
Опции темы Поиск в этой теме Опции просмотра

C++ и получение страницы по HTTP.
  #1  
Старый 17.06.2009, 21:27
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию C++ и получение страницы по HTTP.

Собственно недавно открыл учебник по C++, прочитал,показалось достаточно нетяжело,но вот возник вопрос по работе с сетью.А именно - получением информации по средству http.Статей для моего уровня знаний не нашол.
И так, нужен простейший код соединения с http и принятием информации.Тоесть.
url = "antichat.ru";
.....
и наприер в переменной content остаеться всен содержимое страницы.
Скрипт нужен только для изучения.Если нужны стоонние класы или библиотеки,пожалуйста с названием.И если таковая имееться - литература по ним.Спасибо.
 
Ответить с цитированием

  #2  
Старый 17.06.2009, 21:31
d_x
Reservists Of Antichat - Level 6
Регистрация: 25.03.2008
Сообщений: 670
Провел на форуме:
4137635

Репутация: 2407


По умолчанию

Посмотри темой ниже, только что там отписал)
https://forum.antichat.ru/thread125744.html

Насчет литературы - http://msdn.microsoft.com/en-us/library/ms741394(VS.85).aspx

Последний раз редактировалось d_x; 17.06.2009 в 21:37..
 
Ответить с цитированием

  #3  
Старый 17.06.2009, 21:35
s_p_a_m
Участник форума
Регистрация: 08.02.2008
Сообщений: 116
Провел на форуме:
1608432

Репутация: 158
По умолчанию

Код:
#include <windows.h>

#include <stdio.h>
#include <string.h>
#pragma comment(lib, "ws2_32.lib")

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 %d.%d.%d.%d...",(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);
    }

void main(void) {
    char *result=OpenURL("http://www.antichat.ru/");
    if (result) {
        printf("%s",result);
        free(result);
        }
    else {
        printf("Error # WSABASEERR+%d\n",WSAGetLastError()-WSABASEERR);
        }
	getchar();
	getchar();
    }
 
Ответить с цитированием

  #4  
Старый 17.06.2009, 21:38
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Всем спасибо,совсем забыл про wins.
 
Ответить с цитированием

  #5  
Старый 17.06.2009, 21:46
nerezus
Pagan Heart
Регистрация: 12.08.2004
Сообщений: 3,791
Провел на форуме:
6490435

Репутация: 2290


Отправить сообщение для nerezus с помощью ICQ
По умолчанию

А нахрена юзать апи, когда есть классы-обертки? Количество кода сократится в десяток раз.
 
Ответить с цитированием

  #6  
Старый 17.06.2009, 21:53
[n]-c0der
Участник форума
Регистрация: 03.02.2009
Сообщений: 104
Провел на форуме:
270228

Репутация: 70
По умолчанию

afxinet.h ?)))
 
Ответить с цитированием

  #7  
Старый 18.06.2009, 00:56
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Цитата:
Сообщение от nerezus  
А нахрена юзать апи, когда есть классы-обертки? Количество кода сократится в десяток раз.
Нер, нука подкинь почитать что нибудь про "классы обертки", я знаю у тебя все есть =)
 
Ответить с цитированием

  #8  
Старый 18.06.2009, 01:03
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

Вот,люди,пока не забыл,задам наиглупейший но очень меня волнующий вопрос.
Как в C++ прорисовываеться интерфейс у программы под win32? Прописываеться кодом каждая кнопка и окошко Просто я недалеко зашел,но успел увидить,что привычной для меня в Dekphi панели кнопочек,окошечек,боксов - нет С++ Игшдвук edbltk - tcnm?f d С++ (Visual) - нет =*(
 
Ответить с цитированием

  #9  
Старый 18.06.2009, 01:19
Ra$cal
Постоянный
Регистрация: 16.08.2006
Сообщений: 640
Провел на форуме:
1354067

Репутация: 599


По умолчанию

в вижуал есть. только если ты делаешь на чистом win32 проекте без мфц, то это просто редактор. Если проект мфц - то код опять же упрощается. Выбираешь обрабатываемое событие или сообщение, добавляешь обработчик, указываешь, в какой класс засунуть обработчик и все. Но советую начать с обычных вин32 окошек. Ибо горе делфи не учит работе системы. Учит тока растянуть батон тут, клацнуть там.
Чтобы создалось простое окно делаешь в студии проект вин32 не емпти и не консольный. Открываешь меню view->resource view. Там в дереве dialogs и вперед. Основное окно создается на апи, эбаут создается на шаблоне из ресурсов. Основное окно тоже может быть из ресурсов и создаваться через DialogBox. Советую глянуть firststeps.ru так вроде были основы. И мсдн побольше читай
 
Ответить с цитированием

  #10  
Старый 18.06.2009, 02:06
m0Hze
Он хакер.
Регистрация: 01.11.2008
Сообщений: 1,756
Провел на форуме:
6462214

Репутация: 3171


По умолчанию

2Ra$cal.
на первыхшагах очень унылые и плоховатые уроки.Ничего не сбалансированно,объяснени все теоретические.Вот еслибы бы было чтото такое же,только получше сделанное - было бы отлично.А то книжка многое не объясняет,а про ГУИ я вооббще там ничего не нашол
 
Ответить с цитированием
Ответ



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Полная обзорная статья о Google PR [ANGEL] Статьи 6 16.02.2009 18:31
Живые прокси xdx ICQ 111 15.04.2007 13:10
Proxy Kozak-Scv Анонимность 2 11.02.2007 17:28



Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 


Быстрый переход




ANTICHAT.XYZ