दिलचस्प पोस्ट
एक सामान्य संरचना के निर्माता में "अपेक्षित प्रकार पैरामीटर" त्रुटि MongoDB: क्या यह केस-असंवेदनशील क्वेरी करने के लिए संभव है? नए तत्वों को जोड़ने के लिए क्या उप-वर्गीकृत किया जा सकता है? तालिका में पहचान स्तंभ के लिए एक स्पष्ट मान केवल निर्दिष्ट किया जा सकता है जब एक स्तंभ सूची का उपयोग किया जाता है और IDENTITY_INSERT पर SQL सर्वर है सी # 5.0 में नए async सुविधा को कॉल / सीसी के साथ कैसे कार्यान्वित किया जा सकता है? रेडियन के बजाय डिग्री का उपयोग करने के लिए मैं पाप कैसे कर सकता हूँ, क्योंकि, और तन? पीडीओ पैरामाइसेज किए गए प्रश्न – नामित प्लेसहोल्डर? मैं नाम कैसे बना सकता हूँ? आकर्षित करने के लिए आकर्षित करने या नहीं करने के लिए आकर्षित करें (जब एक को drawRect / कोर ग्राफिक्स बनाम सबव्यूज / छवियों का उपयोग करना चाहिए और क्यों?) फेसबुक ईमेल फील्ड रिटर्न रिक्त (भले ही "ईमेल" की अनुमति सेट और स्वीकार्य हो) MySQL में दो तिथियों के बीच अंतर जब static_cast, dynamic_cast, const_cast और reinterpret_cast को इस्तेमाल किया जाना चाहिए? java.lang.NoSuchMethodError: org.hibernate.SessionFactory.openSession () लोरग / हाइबरनेट / क्लासिक / सत्र एचटीएमएल / जावास्क्रिप्ट एक क्लिक प्रिंट (कोई संवाद नहीं) Scala में एक var और val परिभाषा के बीच अंतर क्या है?

आप C ++ के साथ एक HTTP अनुरोध कैसे करते हैं?

सी + + के साथ आसानी से एक HTTP अनुरोध करने का कोई तरीका है? विशेष रूप से, मैं एक पृष्ठ (एपीआई) की सामग्री डाउनलोड करना चाहता हूं और यह देखने के लिए सामग्री की जांच करनी है कि इसमें 1 या 0 है। क्या यह स्ट्रिंग में सामग्री को डाउनलोड करना संभव है?

Solutions Collecting From Web of "आप C ++ के साथ एक HTTP अनुरोध कैसे करते हैं?"

मुझे भी यही समस्या थी। libcurl वास्तव में पूर्ण है। एक सी + + आवरण क्यूलप है जो आपको ब्याज कर सकता है जैसा कि आप सी ++ लाइब्रेरी के लिए पूछते हैं। नीयन एक और दिलचस्प सी पुस्तकालय है जो वेबडाव का भी समर्थन करता है।

यदि आप सी ++ का उपयोग करते हैं तो कर्लपैप प्राकृतिक लगता है स्रोत वितरण में कई उदाहरण दिए गए हैं। किसी यूआरएल की सामग्री पाने के लिए आप ऐसा कुछ करते हैं (उदाहरणों से निकाले गए):

// Edit : rewritten for cURLpp 0.7.3 // Note : namespace changed, was cURLpp in 0.7.2 ... #include <curlpp/cURLpp.hpp> #include <curlpp/Options.hpp> // RAII cleanup curlpp::Cleanup myCleanup; // Send request and get a result. // Here I use a shortcut to get it in a string stream ... std::ostringstream os; os << curlpp::options::Url(std::string("http://www.wikipedia.org")); string asAskedInQuestion = os.str(); 

कर्लप्प स्रोत वितरण में examples निर्देशिका देखें, बहुत जटिल मामलों में बहुत अधिक है।

मेरे 2 सेंट …

विंडोज कोड:

 #include <string.h> #include <winsock2.h> #include <windows.h> #include <iostream> #include <vector> #include <locale> #include <sstream> using namespace std; #pragma comment(lib,"ws2_32.lib") int main( void ){ WSADATA wsaData; SOCKET Socket; SOCKADDR_IN SockAddr; int lineCount=0; int rowCount=0; struct hostent *host; locale local; char buffer[10000]; int i = 0 ; int nDataLength; string website_HTML; // website url string url = "www.google.com"; //HTTP GET string get_http = "GET / HTTP/1.1\r\nHost: " + url + "\r\nConnection: close\r\n\r\n"; if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0){ cout << "WSAStartup failed.\n"; system("pause"); //return 1; } Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); host = gethostbyname(url.c_str()); SockAddr.sin_port=htons(80); SockAddr.sin_family=AF_INET; SockAddr.sin_addr.s_addr = *((unsigned long*)host->h_addr); if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr)) != 0){ cout << "Could not connect"; system("pause"); //return 1; } // send GET / HTTP send(Socket,get_http.c_str(), strlen(get_http.c_str()),0 ); // recieve html while ((nDataLength = recv(Socket,buffer,10000,0)) > 0){ int i = 0; while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r'){ website_HTML+=buffer[i]; i += 1; } } closesocket(Socket); WSACleanup(); // Display HTML source cout<<website_HTML; // pause cout<<"\n\nPress ANY key to close.\n\n"; cin.ignore(); cin.get(); return 0; } 

यहां एक बेहतर कार्यान्वयन है:

 #include <windows.h> #include <string> #include <stdio.h> using std::string; #pragma comment(lib,"ws2_32.lib") HINSTANCE hInst; WSADATA wsaData; void mParseUrl(char *mUrl, string &serverName, string &filepath, string &filename); SOCKET connectToServer(char *szServerName, WORD portNum); int getHeaderLength(char *content); char *readUrl2(char *szUrl, long &bytesReturnedOut, char **headerOut); int main() { const int bufLen = 1024; char *szUrl = "http://stackoverflow.com"; long fileSize; char *memBuffer, *headerBuffer; FILE *fp; memBuffer = headerBuffer = NULL; if ( WSAStartup(0x101, &wsaData) != 0) return -1; memBuffer = readUrl2(szUrl, fileSize, &headerBuffer); printf("returned from readUrl\n"); printf("data returned:\n%s", memBuffer); if (fileSize != 0) { printf("Got some data\n"); fp = fopen("downloaded.file", "wb"); fwrite(memBuffer, 1, fileSize, fp); fclose(fp); delete(memBuffer); delete(headerBuffer); } WSACleanup(); return 0; } void mParseUrl(char *mUrl, string &serverName, string &filepath, string &filename) { string::size_type n; string url = mUrl; if (url.substr(0,7) == "http://") url.erase(0,7); if (url.substr(0,8) == "https://") url.erase(0,8); n = url.find('/'); if (n != string::npos) { serverName = url.substr(0,n); filepath = url.substr(n); n = filepath.rfind('/'); filename = filepath.substr(n+1); } else { serverName = url; filepath = "/"; filename = ""; } } SOCKET connectToServer(char *szServerName, WORD portNum) { struct hostent *hp; unsigned int addr; struct sockaddr_in server; SOCKET conn; conn = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (conn == INVALID_SOCKET) return NULL; if(inet_addr(szServerName)==INADDR_NONE) { hp=gethostbyname(szServerName); } else { addr=inet_addr(szServerName); hp=gethostbyaddr((char*)&addr,sizeof(addr),AF_INET); } if(hp==NULL) { closesocket(conn); return NULL; } server.sin_addr.s_addr=*((unsigned long*)hp->h_addr); server.sin_family=AF_INET; server.sin_port=htons(portNum); if(connect(conn,(struct sockaddr*)&server,sizeof(server))) { closesocket(conn); return NULL; } return conn; } int getHeaderLength(char *content) { const char *srchStr1 = "\r\n\r\n", *srchStr2 = "\n\r\n\r"; char *findPos; int ofset = -1; findPos = strstr(content, srchStr1); if (findPos != NULL) { ofset = findPos - content; ofset += strlen(srchStr1); } else { findPos = strstr(content, srchStr2); if (findPos != NULL) { ofset = findPos - content; ofset += strlen(srchStr2); } } return ofset; } char *readUrl2(char *szUrl, long &bytesReturnedOut, char **headerOut) { const int bufSize = 512; char readBuffer[bufSize], sendBuffer[bufSize], tmpBuffer[bufSize]; char *tmpResult=NULL, *result; SOCKET conn; string server, filepath, filename; long totalBytesRead, thisReadSize, headerLen; mParseUrl(szUrl, server, filepath, filename); ///////////// step 1, connect ////////////////////// conn = connectToServer((char*)server.c_str(), 80); ///////////// step 2, send GET request ///////////// sprintf(tmpBuffer, "GET %s HTTP/1.0", filepath.c_str()); strcpy(sendBuffer, tmpBuffer); strcat(sendBuffer, "\r\n"); sprintf(tmpBuffer, "Host: %s", server.c_str()); strcat(sendBuffer, tmpBuffer); strcat(sendBuffer, "\r\n"); strcat(sendBuffer, "\r\n"); send(conn, sendBuffer, strlen(sendBuffer), 0); // SetWindowText(edit3Hwnd, sendBuffer); printf("Buffer being sent:\n%s", sendBuffer); ///////////// step 3 - get received bytes //////////////// // Receive until the peer closes the connection totalBytesRead = 0; while(1) { memset(readBuffer, 0, bufSize); thisReadSize = recv (conn, readBuffer, bufSize, 0); if ( thisReadSize <= 0 ) break; tmpResult = (char*)realloc(tmpResult, thisReadSize+totalBytesRead); memcpy(tmpResult+totalBytesRead, readBuffer, thisReadSize); totalBytesRead += thisReadSize; } headerLen = getHeaderLength(tmpResult); long contenLen = totalBytesRead-headerLen; result = new char[contenLen+1]; memcpy(result, tmpResult+headerLen, contenLen); result[contenLen] = 0x0; char *myTmp; myTmp = new char[headerLen+1]; strncpy(myTmp, tmpResult, headerLen); myTmp[headerLen] = NULL; delete(tmpResult); *headerOut = myTmp; bytesReturnedOut = contenLen; closesocket(conn); return(result); } 

लिनक्स पर, मैंने cpp-netlib, libcurl, curlpp, urdl, boost :: asio और qt माना जाता है (लेकिन इसे लाइसेंस के आधार पर बदल दिया)। इनमें से सभी या तो इस उपयोग के लिए अधूरे थे, मैला इंटरफेस थे, खराब प्रलेखन थे, वे अयोग्य थे या वे https का समर्थन नहीं करते थे

उसके बाद, https://stackoverflow.com/a/1012577/278976 के सुझाव पर, मैंने पॉको की कोशिश की वाह, मेरी इच्छा है कि मैंने इस साल पहले देखा था। यहां एक HTTP GET अनुरोध बनाने का एक उदाहरण है:

http://xjia.heroku.com/2011/09/10/learning-poco-get-with-http/

POCO मुफ़्त है, खुले स्रोत (बढ़ावा लाइसेंस) और नहीं, मेरे पास कंपनी के साथ कोई संबंध नहीं है; मैं वास्तव में उनके इंटरफेस की तरह ही महान काम वाले लोग (और लड़कियों)

http://pocoproject.org/download/index.html

उम्मीद है कि यह किसी को मदद करता है … मुझे इन तीनों पुस्तकालयों को बाहर करने के लिए तीन दिन लग गए।

सी ++ अनुरोधों के नाम पर एक नया, कम परिपक्व कर्ल आवरण विकसित किया जा रहा है यहां एक सरल GET अनुरोध है:

 #include <iostream> #include <cpr.h> int main(int argc, char** argv) { auto response = cpr::Get(cpr::Url{"http://httpbin.org/get"}); std::cout << response.text << std::endl; } 

यह एचटीटीपी क्रियाओं और कर्ल विकल्पों की एक विस्तृत विविधता का समर्थन करता है। यहां अधिक उपयोग दस्तावेज़ हैं

अस्वीकरण: मैं इस पुस्तकालय के रखरखाव कर रहा हूँ

जैसा कि आप एक सी + + समाधान चाहते हैं, आप क्यूटी इस्तेमाल कर सकते हैं इसमें एक QHttp वर्ग है जिसका उपयोग आप कर सकते हैं।

आप दस्तावेज़ देख सकते हैं:

 http->setHost("qt.nokia.com"); http->get(QUrl::toPercentEncoding("/index.html")); 

क्यूटी में भी बहुत कुछ है कि आप एक आम सी ++ एप में उपयोग कर सकते हैं

libCURL आपके लिए एक बहुत अच्छा विकल्प है आपको क्या करने की आवश्यकता के आधार पर, ट्यूटोरियल आपको बताए कि आप क्या चाहते हैं, विशेष रूप से आसान हैंडल के लिए लेकिन, मूल रूप से, आप केवल एक पृष्ठ के स्रोत को देखने के लिए ऐसा कर सकते हैं:

 CURL* c; c = curl_easy_init(); curl_easy_setopt( c, CURL_URL, "www.google.com" ); curl_easy_perform( c ); curl_easy_cleanup( c ); 

मेरा मानना ​​है कि इससे परिणाम stdout पर मुद्रित होगा। यदि आप इसके बजाय इसे संभालना चाहते हैं – जो, मुझे लगता है, आप करते हैं – आपको CURL_WRITEFUNCTION सेट करना होगा। ये सब ऊपर से जुड़ी कर्ल ट्यूटोरियल में शामिल है।

यहां कम से कम आवरण के रूप में एक स्ट्रिंग के रूप में एक वेबपेज लाने के लिए सक्षम होने के लिए कर्ल के आसपास है I यह उपयोगी है, उदाहरण के लिए, इकाई परीक्षण के लिए। यह मूलतः सी कोड के आसपास एक आरएआई आवरण है।

अपने मशीन पर "libcurl" स्थापित करें yum install libcurl libcurl-devel या समकक्ष yum install libcurl libcurl-devel

उपयोग का उदाहरण:

 CURLplusplus client; string x = client.Get("http://google.com"); string y = client.Get("http://yahoo.com"); 

कक्षा कार्यान्वयन:

 #include <curl/curl.h> class CURLplusplus { private: CURL* curl; stringstream ss; long http_code; public: CURLplusplus() : curl(curl_easy_init()) , http_code(0) { } ~CURLplusplus() { if (curl) curl_easy_cleanup(curl); } std::string Get(const std::string& url) { CURLcode res; curl_easy_setopt(curl, CURLOPT_URL, url.c_str()); curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl, CURLOPT_WRITEDATA, this); ss.str(""); http_code = 0; res = curl_easy_perform(curl); if (res != CURLE_OK) { throw std::runtime_error(curl_easy_strerror(res)); } curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &http_code); return ss.str(); } long GetHttpCode() { return http_code; } private: static size_t write_data(void *buffer, size_t size, size_t nmemb, void *userp) { return static_cast<CURLplusplus*>(userp)->Write(buffer,size,nmemb); } size_t Write(void *buffer, size_t size, size_t nmemb) { ss.write((const char*)buffer,size*nmemb); return size*nmemb; } }; 

इस जवाब के साथ मैं Software_Developer से जवाब का संदर्भ देता हूं। कोड के पुनर्निर्माण के द्वारा मैंने पाया कि कुछ भागों ( gethostbyname() ) पदावनत कर रहे हैं या आपरेशन के लिए त्रुटि संभाल (सॉकेट्स के निर्माण, कुछ भेजने) प्रदान नहीं करते हैं

निम्न विंडो कोड का परीक्षण विजुअल स्टूडियो 2013 और विंडोज 8.1 64-बिट के साथ-साथ विंडोज 7 64-बिट के साथ किया गया है। यह http://www.google.com के वेब सर्वर के साथ आईपीवी 4 टीसीपी कनेक्शन को लक्षित करेगा।

 #include <winsock2.h> #include <WS2tcpip.h> #include <windows.h> #include <iostream> #pragma comment(lib,"ws2_32.lib") using namespace std; int main (){ // Initialize Dependencies to the Windows Socket. WSADATA wsaData; if (WSAStartup(MAKEWORD(2,2), &wsaData) != 0) { cout << "WSAStartup failed.\n"; system("pause"); return -1; } // We first prepare some "hints" for the "getaddrinfo" function // to tell it, that we are looking for a IPv4 TCP Connection. struct addrinfo hints; ZeroMemory(&hints, sizeof(hints)); hints.ai_family = AF_INET; // We are targeting IPv4 hints.ai_protocol = IPPROTO_TCP; // We are targeting TCP hints.ai_socktype = SOCK_STREAM; // We are targeting TCP so its SOCK_STREAM // Aquiring of the IPv4 address of a host using the newer // "getaddrinfo" function which outdated "gethostbyname". // It will search for IPv4 addresses using the TCP-Protocol. struct addrinfo* targetAdressInfo = NULL; DWORD getAddrRes = getaddrinfo("www.google.com", NULL, &hints, &targetAdressInfo); if (getAddrRes != 0 || targetAdressInfo == NULL) { cout << "Could not resolve the Host Name" << endl; system("pause"); WSACleanup(); return -1; } // Create the Socket Address Informations, using IPv4 // We dont have to take care of sin_zero, it is only used to extend the length of SOCKADDR_IN to the size of SOCKADDR SOCKADDR_IN sockAddr; sockAddr.sin_addr = ((struct sockaddr_in*) targetAdressInfo->ai_addr)->sin_addr; // The IPv4 Address from the Address Resolution Result sockAddr.sin_family = AF_INET; // IPv4 sockAddr.sin_port = htons(80); // HTTP Port: 80 // We have to free the Address-Information from getaddrinfo again freeaddrinfo(targetAdressInfo); // Creation of a socket for the communication with the Web Server, // using IPv4 and the TCP-Protocol SOCKET webSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); if (webSocket == INVALID_SOCKET) { cout << "Creation of the Socket Failed" << endl; system("pause"); WSACleanup(); return -1; } // Establishing a connection to the web Socket cout << "Connecting...\n"; if(connect(webSocket, (SOCKADDR*)&sockAddr, sizeof(sockAddr)) != 0) { cout << "Could not connect"; system("pause"); closesocket(webSocket); WSACleanup(); return -1; } cout << "Connected.\n"; // Sending a HTTP-GET-Request to the Web Server const char* httpRequest = "GET / HTTP/1.1\r\nHost: www.google.com\r\nConnection: close\r\n\r\n"; int sentBytes = send(webSocket, httpRequest, strlen(httpRequest),0); if (sentBytes < strlen(httpRequest) || sentBytes == SOCKET_ERROR) { cout << "Could not send the request to the Server" << endl; system("pause"); closesocket(webSocket); WSACleanup(); return -1; } // Receiving and Displaying an answer from the Web Server char buffer[10000]; ZeroMemory(buffer, sizeof(buffer)); int dataLen; while ((dataLen = recv(webSocket, buffer, sizeof(buffer), 0) > 0)) { int i = 0; while (buffer[i] >= 32 || buffer[i] == '\n' || buffer[i] == '\r') { cout << buffer[i]; i += 1; } } // Cleaning up Windows Socket Dependencies closesocket(webSocket); WSACleanup(); system("pause"); return 0; } 

संदर्भ:

Gethostbyname का अपसामान्यकरण

सॉकेट की वापसी मूल्य ()

वापसी का मूल्य ()

सी ++ इसे सीधे करने के लिए कोई भी तरीका प्रदान नहीं करता है यह आपके प्लेटफ़ॉर्म और पुस्तकालयों पर पूरी तरह निर्भर करेगा।

सबसे खराब स्थिति में, आप टीओपी कनेक्शन स्थापित करने के लिए बढ़ावा :: एएसआईओ लाइब्रेरी का उपयोग कर सकते हैं, HTTP हेडर (आरएफसी 2616) भेज सकते हैं, और प्रतिक्रियाओं को प्रत्यक्ष रूप से पार्स कर सकते हैं। आपके आवेदन की जरूरतों को देखते हुए, यह करना बहुत आसान है

आप C ++ REST SDK (कोडनाम "कैसाब्लांका") को चेक कर सकते हैं। http://msdn.microsoft.com/en-us/library/jj950081.aspx

C ++ REST SDK (कोडनाम "कैसाब्लांका") के साथ, आप अपने सी + + ऐप से अधिक आसानी से HTTP सर्वर से कनेक्ट कर सकते हैं।

C ++ REST SDK (कोडनाम "कैसाब्लांका") एक आधुनिक एसिंक्रोनस सी ++ एपीआई डिज़ाइन का उपयोग करके क्लाउड-आधारित क्लाइंट-सर्वर संचार के लिए मूल कोड में माइक्रोसॉफ्ट प्रोजेक्ट है।

आप एम्बेडेड रीस्ट लाइब्रेरी का उपयोग कर सकते हैं। यह हल्के हेडर-केवल लाइब्रेरी है इसलिए इसे अपने प्रोजेक्ट में शामिल करना आसान है और इसमें संकलन के कारण इसमें कोई .cpp फाइल नहीं है।

रेपो से readme.md से उदाहरण का अनुरोध करें:

 #include "UrlRequest.hpp" //... UrlRequest request; request.host("api.vk.com"); const auto countryId=1; const auto count=1000; request.uri("/method/database.getCities",{ {"lang","ru"}, {"country_id",countryId}, {"count",count}, {"need_all","1"}, }); request.addHeader("Content-Type: application/json"); auto response=std::move(request.perform()); if(response.statusCode()==200){ cout<<"status code = "<<response.statusCode()<<", body = *"<<response.body()<<"*"<<endl; }else{ cout<<"status code = "<<response.statusCode()<<", description = "<<response.statusDescription()<<endl; } 

सी और सी ++ में एचटीटीपी या सॉकेट कनेक्शन के लिए एक मानक पुस्तकालय नहीं है। वर्षों से कुछ पोर्टेबल लाइब्रेरी विकसित की गई हैं। सबसे अधिक व्यापक रूप से इस्तेमाल किया जाता है, जैसा कि अन्य लोगों ने कहा है, यह लाइब्रेक है ।

यहां libcurl (libcurl की वेब साइट से आ रही) के विकल्प की एक सूची है

इसके अलावा, लिनक्स के लिए, यह एक सरल HTTP क्लाइंट है। आप अपने स्वयं के सरल HTTP GET क्लाइंट को लागू कर सकते हैं, लेकिन अगर प्रमाणीकरण या रीडायरेक्ट शामिल हैं या यदि आपको प्रॉक्सी के पीछे काम करने की आवश्यकता है, तो यह काम नहीं करेगा इन मामलों के लिए आपको एक पूर्ण विकसित पुस्तकालय की आवश्यकता है जैसे कि libcurl।

लिबकुरल के साथ स्रोत कोड के लिए, यह आपके लिए सबसे निकटतम है (Libcurl के कई उदाहरण हैं )। मुख्य कार्य को देखें सफलतापूर्वक कनेक्शन के बाद, HTML सामग्री को बफर में कॉपी किया जाएगा। बस अपने स्वयं के फ़ंक्शन के साथ parseHtml को प्रतिस्थापित करें

यहां कुछ (अपेक्षाकृत) सरल C ++ 11 कोड है जो URL की सामग्री को std::vector<char> में डाउनलोड करने के लिए libCURL का उपयोग करता है:

http_download.hh

 # pragma once #include <string> #include <vector> std::vector<char> download(std::string url, long* responseCode = nullptr); 

http_download.cc

 #include "http_download.hh" #include <curl/curl.h> #include <sstream> #include <stdexcept> using namespace std; size_t callback(void* contents, size_t size, size_t nmemb, void* user) { auto chunk = reinterpret_cast<char*>(contents); auto buffer = reinterpret_cast<vector<char>*>(user); size_t priorSize = buffer->size(); size_t sizeIncrease = size * nmemb; buffer->resize(priorSize + sizeIncrease); std::copy(chunk, chunk + sizeIncrease, buffer->data() + priorSize); return sizeIncrease; } vector<char> download(string url, long* responseCode) { vector<char> data; curl_global_init(CURL_GLOBAL_ALL); CURL* handle = curl_easy_init(); curl_easy_setopt(handle, CURLOPT_URL, url.c_str()); curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, callback); curl_easy_setopt(handle, CURLOPT_WRITEDATA, &data); curl_easy_setopt(handle, CURLOPT_USERAGENT, "libcurl-agent/1.0"); CURLcode result = curl_easy_perform(handle); if (responseCode != nullptr) curl_easy_getinfo(handle, CURLINFO_RESPONSE_CODE, responseCode); curl_easy_cleanup(handle); curl_global_cleanup(); if (result != CURLE_OK) { stringstream err; err << "Error downloading from URL \"" << url << "\": " << curl_easy_strerror(result); throw runtime_error(err.str()); } return move(data); } 

आम तौर पर मैं कुछ क्रॉस-प्लेटफॉर्म की सिफारिश करता हूं जैसे कि curl, poco, या qt हालांकि, यहां एक विंडोज़ का उदाहरण है!

 #include <atlbase.h> #include <msxml6.h> #include <comutil.h> // _bstr_t HRESULT hr; CComPtr<IXMLHTTPRequest> request; hr = request.CoCreateInstance(CLSID_XMLHTTP60); hr = request->open( _bstr_t("GET"), _bstr_t("http://img.hiwab.com/c%2B%2B/logo11w.png"), _variant_t(VARIANT_FALSE), _variant_t(), _variant_t()); hr = request->send(_variant_t()); // get status - 200 if succuss long status; hr = request->get_status(&status); // load image data (if url points to an image) VARIANT responseVariant; hr = request->get_responseStream(&responseVariant); IStream* stream = (IStream*)responseVariant.punkVal; CImage *image = new CImage(); image->Load(stream); stream->Release(); 

थोड़ी देर देर हो चुकी है आप https://github.com/Taymindis/backcurl को पसंद कर सकते हैं

यह आपको मोबाइल सी + + विकास पर http कॉल करने की अनुमति देता है मोबाइल गेम विकास के लिए उपयुक्त

 bcl::init(); // init when using bcl::execute<std::string>([&](bcl::Request *req) { bcl::setOpts(req, CURLOPT_URL , "http://www.google.com", CURLOPT_FOLLOWLOCATION, 1L, CURLOPT_WRITEFUNCTION, &bcl::writeContentCallback, CURLOPT_WRITEDATA, req->dataPtr, CURLOPT_USERAGENT, "libcurl-agent/1.0", CURLOPT_RANGE, "0-200000" ); }, [&](bcl::Response * resp) { std::string ret = std::string(resp->getBody<std::string>()->c_str()); printf("Sync === %s\n", ret.c_str()); }); bcl::cleanUp(); // clean up when no more using 

HTTP प्रोटोकॉल बहुत सरल है, इसलिए एक HTTP क्लाइंट लिखना बहुत सरल है। यहाँ एक है

https://github.com/pedro-vicente/lib_netsockets

यह वेब सर्वर से एक फ़ाइल को प्राप्त करने के लिए HTTP GET का उपयोग करता है, दोनों सर्वर और फ़ाइल कमांड लाइन पैरामीटर हैं। दूरस्थ फ़ाइल स्थानीय प्रति में सहेजी गई है

अस्वीकरण: मैं लेखक हूँ

संपादित करें: संपादित यूआरएल

ऐसा करने के लिए आप एसीई का उपयोग कर सकते हैं:

 #include "ace/SOCK_Connector.h" int main(int argc, ACE_TCHAR* argv[]) { //HTTP Request Header char* szRequest = "GET /video/nice.mp4 HTTP/1.1\r\nHost: example.com\r\n\r\n"; int ilen = strlen(szRequest); //our buffer char output[16*1024]; ACE_INET_Addr server (80, "example.com"); ACE_SOCK_Stream peer; ACE_SOCK_Connector connector; int ires = connector.connect(peer, server); int sum = 0; peer.send(szRequest, ilen); while (true) { ACE_Time_Value timeout = ACE_Time_Value(15); int rc = peer.recv_n(output, 16*1024, &timeout); if (rc == -1) { break; } sum += rc; } peer.close(); printf("Bytes transffered: %d",sum); return 0; }