は、私は、URLからJSONデータを取得しようとしています:私は、データがそのURLから返さ取得したいlibcurl HTTP webrequestを作成するには?
sub.domain.com/rest/getdiscounts?supermarketid=5323
。ターミナルでは、私はこのようにそれを行うことができます。私のような、これまでに複数のものを試してみました
curl --user user:password "http://sub.domain.com/rest/getdiscounts?supermarketid=5323"
:
static string lastResponse;
size_t server_response_stream(void *ptr, size_t size, size_t nmemb, void *)
{
lastResponse += (const char*)ptr;
return size * nmemb;
}
bool get_request(string data1, string& errorDescription)
{
CURL *curl = curl_easy_init();
if (curl == NULL)
{
errorDescription = "Unable to initialise Curl";
cout << errorDescription << std::endl;
return false;
}
const string url = "http://sub.domain.com/rest/";
curl_easy_setopt(curl, CURLOPT_URL, (url + "getdiscounts").c_str());
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_easy_setopt(curl, CURLOPT_USERPWD, USPA);
char* dc1 = curl_easy_escape(curl, data1.c_str(), 0);
string arg = "supermarketid=" + (string)dc1;
const char* dt = arg.c_str();
curl_easy_setopt(curl, CURLOPT_POSTFIELDS, dt);
curl_easy_setopt(curl, CURLOPT_POSTFIELDSIZE, (long)strlen(dt));
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
lastResponse = "";
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, server_response_stream);
CURLcode res = curl_easy_perform(curl);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
errorDescription = "Curl call to server failed!";
cout << errorDescription << std::endl;
return false;
}
curl_easy_cleanup(curl);
return true;
}
私はソースthis questionとthis linkとして使用します。
編集:ありがとうございました!私は再びゼロから開始し、それが今取り組んでいる:
static string responseStr;
size_t write_callback(void *ptr, size_t size, size_t nmemb, void *)
{
responseStr = (const char*)ptr;
return size * nmemb;
}
string get_request()
{
CURL *curl;
CURLcode res;
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, "http://sub.domain.com/rest/getdiscounts?supermarketid=5323");
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_HTTPAUTH, CURLAUTH_BASIC);
curl_easy_setopt(curl, CURLOPT_USERPWD, CREDENTIALS);
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, write_callback);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
{
cout << "curl_easy_perform() failed!" << std::endl;
curl_easy_strerror(res);
curl_easy_cleanup(curl);
return "";
}
else if (res == CURLE_OK)
{
curl_easy_cleanup(curl);
return responseStr;
}
}
}
なぜ2回演奏していますか? – 2501
@ 2501作業を行うために第2の呼び出しを認証するための第1の呼び出し。 – Zero
'curl --user user:password" http://sub.domain.com/rest/getdiscounts?supermarketid=5323 "' POSTリクエストを作成するときにGETリクエストのように見えますが、それは奇妙ではありませんか? – nodakai