安装 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 https://stackoverflow.com/questions/40032483/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;
- }
来源: http://www.bubuko.com/infodetail-2753945.html