標籤:creat file catch status into exception search streambuf ali
安裝 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
/usr/local/Cellar/libressl/2.7.4/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 conversionsusing namespace web; // Common features like URIs.using namespace web::http; // Common HTTP functionalityusing namespace web::http::client; // HTTP client featuresusing namespace concurrency::streams; // Asynchronous streamsint 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 進行網路編程