使用 C++ REST SDK 進行網絡編程
阿新 • • 發佈:2018-09-04
art received cell stream return fstream boost creat mbo
/usr/local/Cellar/libressl/2.7.4/include
安裝 C++ REST SDK
$ brew install cpprestsdk
$ brew install boost
$ brew install libressl
創建工程
打開 Xcode,File / New / Project...
在向導的第1頁選 macOS / Command Line Tool
在向導的第2頁語言選 C++,Product Name 填上任意名稱
在向導的第3頁選擇任意文件夾,點擊 Create 創建工程。
配置工程
將 System Header Search Paths 設置為
/usr/local/Cellar/cpprestsdk/2.10.2/include
/usr/local/Cellar/boost/1.67.0_1/include
將 Library Search Paths 設置為
/usr/local/Cellar/cpprestsdk/2.10.2/lib
/usr/local/Cellar/boost/1.67.0_1/lib
/usr/local/Cellar/libressl/2.7.4/lib
將 Other Linker Flags 設置為
-lcpprest -lboost_system -lboost_thread-mt -lboost_chrono-mt -lssl -lcrypto
cpprestsdk: Undefined symbols for architecture x86_64
C++ 代碼
#include <cpprest/http_client.h> #include <cpprest/filestream.h> using namespace utility; // Common utilities like string conversions using namespace web; // Common features like URIs. using namespace web::http; // Common HTTP functionality using namespace web::http::client; // HTTP client features using namespace concurrency::streams; // Asynchronous streams int main(int argc, char* argv[]) { auto fileStream = std::make_shared<ostream>(); // Open stream to output file. pplx::task<void> requestTask = fstream::open_ostream(U("results.html")).then([=](ostream outFile) { *fileStream = outFile; // Create http_client to send the request. http_client client(U("http://www.bing.com/")); // Build request URI and start the request. uri_builder builder(U("/search")); builder.append_query(U("q"), U("cpprestsdk github")); return client.request(methods::GET, builder.to_string()); }) // Handle response headers arriving. .then([=](http_response response) { printf("Received response status code:%u\n", response.status_code()); // Write response body into the file. return response.body().read_to_end(fileStream->streambuf()); }) // Close the file stream. .then([=](size_t) { return fileStream->close(); }); // Wait for all the outstanding I/O to complete and handle any exceptions try { requestTask.wait(); } catch (const std::exception &e) { printf("Error exception:%s\n", e.what()); } return 0; }
使用 C++ REST SDK 進行網絡編程