C REST SDK的基本用法

2021-09-06 19:39:42 字數 2508 閱讀 4148

這個例子把從bing.com上查詢「casablanca codeplex」的內容儲存到乙個本地檔案result.html中,用到了ppl的序列任務。啟用了四個非同步任務,第乙個任務是開啟乙個檔案流,接著,發起了第二個任務,用於發起乙個查詢請求,然後,第三個任務等待請求的響應,並將響應的結果輸入到檔案中去,第四個任務是關閉檔案流。要注意rest sdk的字元相關的入參是寬字元(wchr_t)。這種處理http的方式讓我們處理http的流程變得很清晰,有點小清新^_^,不過,這對於不太熟悉ppl用法的童鞋可能有點難接受,沒關係,讓我來簡化一下,簡化成同步方式,看得就更清楚了。

void

testrequest()

注意上面的get()方法會阻塞等待非同步執行緒完成操作。這樣簡化之後就能更清晰的看到如何使用rest sdk了,下面來說說發起http操作的幾個物件。 http_client代表客戶端,需要它發起http請求。rest api一般是基於乙個基本url增加了一些url,比如上例中的search,還有可能有一些url引數,這時,我們就需要uri_builder來做這些拼接url和引數的事情,用起來很簡單。

uri_builder builder;

"search

"); //

新增url

q", l"

casablanca codeplex

"); //

新增url引數

待url和引數準備好之後就可以發起請求了,請求方式可以用methods::get和methods::post等方式。

client.request(methods::get, builder.to_string()).get();

上面的例子中並沒有request body,有時候我們發起http請求還需要request body,一般是json或者二進位制格式,來看乙個post json格式的request body的例子,rest sdk提供了json物件來解析json,用起來也很方便:

uri_builder builder;

"/test");

json::value obj;

obj[l

"count

"] = json::value::number(6

);obj[l

"version

"] = json::value::string(l"

1.0"

);client.request(methods::post, builder.to_string(), obj.serialize(), l

"");

如果request body為二進位制格式的話,這樣發請求就可以了:

請求發起之後就等http響應了,rest api返回的結果都是json格式的,所以我們需要解析json物件,rest sdk提供了http_response物件來處理響應。假設http響應的結果是這樣的:

http響應的處理:

if (response.status_code() ==status_codes::ok)

catch (const std::exception&e)

}

用wcout輸出寬字元時需要做乙個初始化,否則可能輸出不了內容。

wcout.imbue(locale("

chs"));//

本地化

設定為90秒超時

總結:可以看到c++ rest sdk的用法是很簡單的,uri的解析和拼接,json的處理,請求和響應的處理都有相應的物件,我們用起來就很省心了。微軟提供的c++ rest sdk真是個好東西,值得我們深入去研究。

mysql 的基本用法 mysql基本用法

mysql 5.1 中文參考手冊 show databases 顯示資料庫 drop database 資料庫名 刪除資料庫 set names utf8 設定資料庫編碼為utf 8 source x 資料庫名.sql 匯入乙個資料庫 use 資料庫名 嘗試訪問資料庫 create database...

mysql 的基本用法 mysql基本用法

mysql 5.1 中文參考手冊 show databases 顯示資料庫 drop database 資料庫名 刪除資料庫 set names utf8 設定資料庫編碼為utf 8 source x 資料庫名.sql 匯入乙個資料庫 use 資料庫名 嘗試訪問資料庫 create database...

this的基本用法

this 代表所在類的物件的引用。方法被那個物件呼叫,this就代表哪個物件,簡單的說,他就代表當前類的乙個物件。注意 誰呼叫這個方法,在方法內部的this就代表誰。this的應用場景 解決區域性變數,隱藏成員變數。class student 姓名設定值 public void setname st...