1

Тема: POST, GET запроси

Народ, допоможіть плз... Потрібний приклад POST і GET запросів без використання додаткових бібліотек... А ще, якщо хтось знає, то завантаження коду сайту (html) в блокнот (*.txt)...

2

Re: POST, GET запроси

А що пише Гугловський? Чи ви його навіть не відкривали?

I belong to the Dead Generation.

3

Re: POST, GET запроси

Я гуглив, але більшість кодів використовують додаткові бібліотеки...

4 Востаннє редагувалося o_0ps (19.01.2014 23:41:25)

Re: POST, GET запроси

Якщо комусь треба:

#include "stdafx.h"
#include <stdio.h>
#include <winsock2.h>
#pragma comment(lib, "ws2_32.lib")
SOCKET xopen(const char* address, unsigned short port);
int xwrite(SOCKET sock, const char* src, int size);
int xread(SOCKET sock, char* dst, int size);
 
int main(void) {
   // HTTP - запрос для получения страницы текущей темы этого форума
    char*    http = "GET [url]http://www.w3.org/2008/09/msnws/papers/trustprivacy.html [/url] HTTP/1.0\r\n"\
                  "Host: www.w3.org\r\n\r\n";
   int        res;
   SOCKET sock;
   FILE*    fp;
   char      buf[4096]; // буфера приёма данных 4-KB
   WSADATA  data;
 
  if(WSAStartup(MAKEWORD(2, 0), &data) != 0) 
       exit(1);
 
   sock = xopen("www.w3.org", 80); // соединение с сервером
   if(sock == NULL)
       exit(2);
   puts("Connection server...");
 
   // посылаем HTTP-запрос серверу
   if(xwrite(sock, http, strlen(http)))
       puts("Start upload data...");
   else
       goto  error;
 
   Sleep(1000u);
 
   // создаём файл для записи страницы
   fp = fopen("E:\\tmp.html", "w+");
 
   // читаем страницу по 4-KB
   while((res = xread(sock, buf, sizeof(buf))) > 0) {
      buf[res] = '\0';
      fwrite(buf, sizeof(char), strlen(buf), fp);
   }
   fflush(fp);
   fclose(fp);
 
   puts("Finish uploaden file.");
error:
   closesocket(sock);
   WSACleanup();
 
   getchar();
   return 0;
}
 
 
// функция по установке соединения с сервером
SOCKET xopen(const char* address, unsigned short port) {
   SOCKET  sock;
   sockaddr_in addr;
   hostent* host = NULL;
 
   memset(&addr, 0, sizeof(sockaddr_in));
   addr.sin_family = AF_INET;
   addr.sin_port  = htons(port);  
   host  = gethostbyname(address);
   if(host == NULL) 
        return  NULL;
   memcpy(&addr.sin_addr, host->h_addr_list[0], host->h_length);
    
   sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
   if(sock == INVALID_SOCKET) 
        return NULL;                
   if(connect(sock, (sockaddr*)&addr, sizeof(sockaddr_in)) == SOCKET_ERROR ) 
        return  NULL;
    return sock;
}
 
// посылка данных серверу
int xwrite(SOCKET sock, const char* src, int size) {
    return  (send(sock, src, size, NULL) == SOCKET_ERROR) ? 0 : 1;
}
 
// чтения данных с сервера
int xread(SOCKET sock, char* dst, int size) {
    int  res = recv(sock, dst, size, NULL);
    if(res == SOCKET_ERROR)
        return -1;
    return res;
}
Подякували: koala1