Исходник SendGet

CleanLegend

Известный
Автор темы
Всефорумный модератор
474
927
Класс для отправки get запроса и получения ответа.

CleanLegend/SendGet(https://github.com/CleanLegend/SendGet)
Пример использования:

C++:
MyGet MyGetGet;
std::string myotvet;
MyGetGet.Init("mysite.com");
MyGetGet.SendGet("test.php?user=test", myotvet);
MyGetGet.DeInit();
 

#Rin

Известный
Всефорумный модератор
1,214
1,035
Целый класс для одного GET запроса.
Не проще так:
C++:
#include <WinInet.h>
#pragma comment (lib, "WinInet.lib")

enum RequestType
{
    GET,
    POST
};

char *SendRequest(int type, char *site, char *file, char *message)
{
    char *fileAndMessage;
    DWORD size;
    char szBuffer[1024];
    memset(&szBuffer, NULL, sizeof(szBuffer));

    HINTERNET hSession = InternetOpen("App", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession != NULL)
    {
        HINTERNET hConnect = InternetConnect(hSession, site, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            if (type == RequestType::GET)
                sprintf(fileAndMessage, "%s?%s", file, message);
            HINTERNET hRequest = HttpOpenRequest(hConnect, (type == RequestType::POST ? "POST" : "GET"), (type == RequestType::POST ? file : fileAndMessage), NULL, NULL, 0, 0, 1);
            if (hRequest != NULL)
            {
                LPCSTR header;
                header = "Accept: */*";
                HttpAddRequestHeaders(hRequest, header, strlen(header), HTTP_ADDREQ_FLAG_ADD);
                header = "Content-Type: application/x-www-form-urlencoded";
                HttpAddRequestHeaders(hRequest, header, strlen(header), HTTP_ADDREQ_FLAG_ADD);
                if (HttpSendRequest(hRequest, NULL, 0, (type == RequestType::POST ? message : NULL), (type == RequestType::POST ? strlen(message) : NULL)))
                {
                    if (InternetReadFile(hRequest, szBuffer, sizeof(szBuffer), &size))
                        return szBuffer;
                }
            }
            InternetCloseHandle(hRequest);
        }
        InternetCloseHandle(hConnect);
    }
    InternetCloseHandle(hSession);
    return FALSE;
}
UPD: С текущими моими знаниями, этот код выглядит не очень.
 
Последнее редактирование:
  • Нравится
Реакции: Stiopko и ufdhbi

AnWu

Guardian of Order
Всефорумный модератор
4,683
5,129
@CleanLegend буфер для ответа всего 1024 байт. Можешь сделать динамическую строку под ответ? У меня не получается.
 

sqlaer.

Известный
2
0
Целый класс для одного GET запроса.
Не проще так:
C++:
#include <WinInet.h>
#pragma comment (lib, "WinInet.lib")

enum RequestType
{
    GET,
    POST
};

char *SendRequest(int type, char *site, char *file, char *message)
{
    char *fileAndMessage;
    DWORD size;
    char szBuffer[1024];
    memset(&szBuffer, NULL, sizeof(szBuffer));

    HINTERNET hSession = InternetOpen("App", INTERNET_OPEN_TYPE_PRECONFIG, NULL, NULL, 0);
    if (hSession != NULL)
    {
        HINTERNET hConnect = InternetConnect(hSession, site, INTERNET_DEFAULT_HTTP_PORT, NULL, NULL, INTERNET_SERVICE_HTTP, 0, 1);
        if (hConnect != NULL)
        {
            if (type == RequestType::GET)
                sprintf(fileAndMessage, "%s?%s", file, message);
            HINTERNET hRequest = HttpOpenRequest(hConnect, (type == RequestType::POST ? "POST" : "GET"), (type == RequestType::POST ? file : fileAndMessage), NULL, NULL, 0, 0, 1);
            if (hRequest != NULL)
            {
                LPCSTR header;
                header = "Accept: */*";
                HttpAddRequestHeaders(hRequest, header, strlen(header), HTTP_ADDREQ_FLAG_ADD);
                header = "Content-Type: application/x-www-form-urlencoded";
                HttpAddRequestHeaders(hRequest, header, strlen(header), HTTP_ADDREQ_FLAG_ADD);
                if (HttpSendRequest(hRequest, NULL, 0, (type == RequestType::POST ? message : NULL), (type == RequestType::POST ? strlen(message) : NULL)))
                {
                    if (InternetReadFile(hRequest, szBuffer, sizeof(szBuffer), &size))
                        return szBuffer;
                }
            }
            InternetCloseHandle(hRequest);
        }
        InternetCloseHandle(hConnect);
    }
    InternetCloseHandle(hSession);
    return FALSE;
}
Точно, в класс. А проще всего?
 

itsLegend

Фонд борьбы за жуков 🐞
Администратор
2,695
1,447
Класс для отправки get запроса и получения ответа.

CleanLegend/SendGet(https://github.com/CleanLegend/SendGet)
Пример использования:

C++:
MyGet MyGetGet;
std::string myotvet;
MyGetGet.Init("mysite.com");
MyGetGet.SendGet("test.php?user=test", myotvet);
MyGetGet.DeInit();
Мне кажется ты промахнулся с 27 строчкой
CleanLegend/SendGet(https://github.com/CleanLegend/SendGet/blob/master/myGet.cpp#L27)
 
  • Нравится
Реакции: AnWu

vegas

Известный
637
441
А можно как-то убрать мелкие фризы при отправке get запроса?