C++傳送訊息格式為JSON的http請求
阿新 • • 發佈:2019-01-27
JSON是類似於xml的一種用於資訊互動的輕量級資訊定義格式,可擴充套件性也很好。如何用C++寫的程式碼來發送http請求,訊息格式採用JSON呢?下面我一步一步介紹。所有步驟都經實際驗證,測試平臺為linux系統。
1. 傳送http請求需要安裝curl庫。這個庫一般linux系統是自帶的。自己可以在系統目錄檢視下即可。
2. 需要構造和解析json格式的訊息要用到jsoncpp庫,需要下載,我用的是 jsoncpp-src-0.5.0.tar.gz這個版本, 安裝jsoncpp 庫需要用到scons,所以需要預先安裝scons。我下載的 scons-2.0.1.tar.gz這個版本。
3. 執行tar -zxf scons-2.0.1.tar.gz 解壓
scons-2.0.1.tar.gz後, 進入 scons-2.0.1檔案夾,執行python setup.py install 即可完成編譯安裝。
4. 安裝好了scons後,執行tar -zxvf jsoncpp-src-0.5.0.tar.gz 解壓。讓後進入jsoncpp-src-0.5.0目錄,執行scons platform=linux-gcc 完成編譯。然後拷貝mv ~/jsoncpp-src-0.5.0/libs/linux-gcc-3.4.6/libjson_linux-gcc-3.4.6_libmt.so /lib/ 拷貝 mv~/jsoncpp-src-0.5.0/include/json /usr/include -r完成json安裝。
5.測試程式碼如下。
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <json/json.h>
#define MAX_BUF 65536
char wr_buf[MAX_BUF+1];
int wr_index;
size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
{
int segsize = size * nmemb;
if ( wr_index + segsize > MAX_BUF ) {
*(int *)userp = 1;
return 0;
}
memcpy( (void *)&wr_buf[wr_index], buffer, (size_t)segsize );
wr_index += segsize;
wr_buf[wr_index] = 0;
return segsize;
}
int main( void )
{
CURL *curl;
CURLcode ret;
int wr_error;
wr_error = 0;
wr_index = 0;
curl = curl_easy_init();
if (!curl) {
printf("couldn't init curl ");
return 0;
}
//指定url
curl_easy_setopt( curl, CURLOPT_URL, "https://api.weibo.com/2/statuses/public_timeline.json" );
//準備構造json格式訊息
Json::Value value;
value["id"]=Json::Value(5345);
1. 傳送http請求需要安裝curl庫。這個庫一般linux系統是自帶的。自己可以在系統目錄檢視下即可。
2. 需要構造和解析json格式的訊息要用到jsoncpp庫,需要下載,我用的是 jsoncpp-src-0.5.0.tar.gz這個版本, 安裝jsoncpp 庫需要用到scons,所以需要預先安裝scons。我下載的 scons-2.0.1.tar.gz這個版本。
3. 執行tar -zxf scons-2.0.1.tar.gz
4. 安裝好了scons後,執行tar -zxvf jsoncpp-src-0.5.0.tar.gz 解壓。讓後進入jsoncpp-src-0.5.0目錄,執行scons platform=linux-gcc 完成編譯。然後拷貝mv ~/jsoncpp-src-0.5.0/libs/linux-gcc-3.4.6/libjson_linux-gcc-3.4.6_libmt.so /lib/ 拷貝 mv~/jsoncpp-src-0.5.0/include/json /usr/include -r完成json安裝。
5.測試程式碼如下。
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#include <json/json.h>
#define MAX_BUF 65536
char wr_buf[MAX_BUF+1];
int wr_index;
size_t write_data( void *buffer, size_t size, size_t nmemb, void *userp )
{
int segsize = size * nmemb;
if ( wr_index + segsize > MAX_BUF ) {
*(int *)userp = 1;
return 0;
}
memcpy( (void *)&wr_buf[wr_index], buffer, (size_t)segsize );
wr_index += segsize;
wr_buf[wr_index] = 0;
return segsize;
}
int main( void )
{
CURL *curl;
CURLcode ret;
int wr_error;
wr_error = 0;
wr_index = 0;
curl = curl_easy_init();
if (!curl) {
printf("couldn't init curl ");
return 0;
}
//指定url
curl_easy_setopt( curl, CURLOPT_URL, "https://api.weibo.com/2/statuses/public_timeline.json" );
//準備構造json格式訊息
Json::Value value;
value["id"]=Json::Value(5345);