日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务

發布時間:2025/3/15 linux 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

C++ REST SDK是微軟開源的一套客戶端-服務器通信庫,提供了URI構造/解析,JSON編解碼,HTTP客戶端、HTTP服務端,WebSocket客戶端,流式傳輸,oAuth驗證等C++類,方便C++語言編寫的客戶端程序訪問互聯網服務。其中HTTP服務端相關的類是最近新增的(尚處于beta測試階段),這些類拓展了C++ REST SDK的功能,現在不僅能開發客戶端程序,也能做服務端開發了。

獲取C++ REST SDK:

目前C++ REST SDK源代碼托管在github上,地址為:

https://github.com/Microsoft/cpprestsdk

可以用Git克隆或直接下載zip包

編譯C++ REST SDK:

C++ REST SDK自帶Visual Studio 2013及Visual Studio 2015解決方案文件,使用這兩種IDE直接打開相應的解決方案即可。對于其它平臺,可以用CMake生成該平臺的MakeFile進行編譯。編譯C++ REST SDK還需要Boost和OpenSSL的開發文件,如果CMake提示找不到Boost或OpenSSL,則需要先行下載安裝這幾個庫。

CMake: cmake.org

Boost: www.boost.org

OpenSSL: www.openssl.org

下面是一個簡單的HTTP服務器程序,接收HTTP POST或GET請求,在控制臺上打出請求的方法名,URI和查詢參數,并返回"ACCEPTED"字符串。C++ REST SDK的API相當簡明,無需注解應該可以看懂。#include?

#include?

#include?

#include?

#pragma?comment(lib,?"cpprest_2_7.lib")

#pragma?comment(lib,?"bcrypt.lib")

#pragma?comment(lib,?"crypt32.lib")

#pragma?comment(lib,?"winhttp.lib")

#pragma?comment(lib,?"httpapi.lib")

using?namespace?web;

using?namespace?http;

using?namespace?utility;

using?namespace?http::experimental::listener;

class?CommandHandler

{

public:

CommandHandler()?{}

CommandHandler(utility::string_t?url);

pplx::task?open()?{?return?m_listener.open();?}

pplx::task?close()?{?return?m_listener.close();?}

private:

void?handle_get_or_post(http_request?message);

http_listener?m_listener;

};

CommandHandler::CommandHandler(utility::string_t?url)?:?m_listener(url)

{

m_listener.support(methods::GET,?std::bind(&CommandHandler::handle_get_or_post,?this,?std::placeholders::_1));

m_listener.support(methods::POST,?std::bind(&CommandHandler::handle_get_or_post,?this,?std::placeholders::_1));

}

void?CommandHandler::handle_get_or_post(http_request?message)

{

ucout?<

ucout?<

ucout?<

message.reply(status_codes::OK,?"ACCEPTED");

};

int?main(int?argc,?char?argv[])

{

try

{

utility::string_t?address?=?U("http://*:8080");

uri_builder?uri(address);

auto?addr?=?uri.to_uri().to_string();

CommandHandler?handler(addr);

handler.open().wait();

ucout?<

ucout?<

std::string?line;

std::getline(std::cin,?line);

handler.close().wait();

}

catch?(std::exception&?ex)

{

ucout?<

ucout?<

std::string?line;

std::getline(std::cin,?line);

}

return?0;

}

以上代碼在Visual Studio 2013下,用C++ REST SDK 2.7編譯通過,運行正常,在Linux系統下也可以編譯通過,但是需要鏈接不同的庫,命令行為:

c++ -o restserver -std=c++11 restserver.cpp -lcpprest -lboost_system -lssl -lcrypto

測試服務器是否正常,可以用瀏覽器隨便輸入一個地址,例如http://localhost:8080/test?param=ok

需要注意的是,C++ REST SDK在Windows下,使用Windows系統自帶的WinHTTP/HTTP Server API來實現HTTP協議通信,而在其它平臺下是用Boost ASIO來實現HTTP協議通信,這兩者的實際行為是有區別的,例如:

1.用C++ REST SDK編寫HTTP客戶端,當服務端返回響應碼301/302時,Windows下會用新地址自動重發請求,而Linux下則不會(運行C++ REST SDK自帶的BingRequest示例即可看到這一差異)。

2.用C++ REST SDK編寫HTTP服務端,需要在所有的網絡接口上監聽時,Windows下應使用地址"http://*:8080",而Linux下應使用地址"http://0.0.0.0:8080"。

另外,在Windows下用C++ REST SDK開發HTTP服務時,還有兩個坑需要注意:

第一,由于HTTP Server API自身的一些特性,當C++ REST SDK服務程序在localhost之外的地址上監聽時,默認需要以管理員身份運行程序,如果以普通用戶身份運行上面的小程序,則發生異常:

Exception: Access denied: attempting to add Address 'http://*:8080/'. Run as administrator to listen on an hostname other than localhost, or to listen on port 80.

如果不希望每次都以管理員身份運行,可以用以下命令開放普通用戶的權限:

netsh http add urlacl url=http://*:8080/ user=BUILTIN\Users listen=yes

該命令本身要以管理員身份運行,在Windows 8.1系統下,用Win+X組合鍵打開“命令提示符(管理員)”,輸入命令即可

第二:由于HTTP Server API內部用到了一個內核模塊http.sys,C++ REST SDK服務程序通過Windows防火墻的方式和普通TCP服務程序不太一樣,直接用程序的可執行文件建立防火墻規則是無效的。正確的方式是新建一個入站規則,程序名稱設為system,并設置本地端口為想要監聽的端口號。

總結

以上是生活随笔為你收集整理的cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。