CURLはHTTP要求を送信してJsonデータ列をローカルに保存する(linuxでC++プログラミング)
最近、JsonとCurlリクエストを使うプロジェクトをしています.要求はこうだ
私はCURL+宛先IPアドレスで宛先アドレスにHTTP要求を送信する必要があります.要求はJsonの文字列を返し、私はそれをローカルに保存して使用します.
私は直接コードをつけて、具体的に説明しないで、みんなの参考に供します
私はCURL+宛先IPアドレスで宛先アドレスにHTTP要求を送信する必要があります.要求はJsonの文字列を返し、私はそれをローカルに保存して使用します.
私は直接コードをつけて、具体的に説明しないで、みんなの参考に供します
#include
#include
#include
#include
#include
#define filemax 2048
#define CDN_num 1024
using namespace std;
size_t get_data(void*prt,size_t size, size_t nmemb, FILE * stream)
{
size_t written = fwrite(prt,size,nmemb,stream);
return written;
}
struct CDN_Info
{
string name;
string IP;
string APP;
string StreamName;
int Link_num;
};
int main()
{
CDN_Info CDN_Mess[CDN_num];
int i=0;
FILE* fp;
const char* api_url="192.168.1.107/getclient";
CURLcode res;
CURL* curl=curl_easy_init();
char outfile[filemax]="Temp.json";
fp = fopen(outfile,"wb");
curl_easy_setopt(curl,CURLOPT_URL,api_url);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,get_data);
curl_easy_setopt(curl,CURLOPT_WRITEDATA,fp);
res=curl_easy_perform(curl);
if (res!=CURLE_OK)
{
perror("Curl error");
return 1;
}
curl_easy_cleanup(curl);
fclose(fp);
Json::Reader reader;
Json::Value root;
ifstream is;
is.open("Temp.json",ios::out);
if (!reader.parse(is,root))
{
return 1;
}
for (Json::Value::iterator idx = root.begin();idx != root.end();idx++)
{
CDN_Mess[i].name=root[i]["name"].asString();
CDN_Mess[i].IP=root[i]["url"].asString();
CDN_Mess[i].APP=root[i]["app"].asString();
CDN_Mess[i].StreamName=root[i]["stream"].asString();
CDN_Mess[i].Link_num=root[i]["client"].asInt();
i++;
}
}