웹 서버에서 GET 요청을 사용하여 json 데이터를 가져 오는 데 libcurl을 사용하고 있습니다. 여기CURLOPT_WRITEDATA 문제
char *DownloadedResponse;
static int writer(char *data, size_t size, size_t nmemb, char *buffer_in)
{
if (buffer_in != NULL)
{
buffer_in = new char[size*nmemb];
strcpy(buffer_in,data);
DownloadedResponse = buffer_in;
return size * nmemb;
}
return 0;
}
char * DownloadJSON(string URL)
{
CURL *curl;
CURLcode res;
struct curl_slist *headers=NULL;
curl_slist_append(headers, "Accept: application/json");
curl_slist_append(headers, "Content-Type: application/json");
curl_slist_append(headers, "charsets: utf-8");
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl, CURLOPT_URL, URL.c_str());
curl_easy_setopt(curl, CURLOPT_HTTPGET,1);
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
curl_easy_setopt(curl,CURLOPT_WRITEFUNCTION,writer);
res = curl_easy_perform(curl);
if (CURLE_OK == res)
{
char *ct;
res = curl_easy_getinfo(curl, CURLINFO_CONTENT_TYPE, &ct);
if((CURLE_OK == res) && ct)
{
cout<<"\nresponse received: "<<DownloadedResponse;
}
else
{
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl = NULL;
return NULL;
}
}
}
curl_slist_free_all(headers);
curl_easy_cleanup(curl);
curl = NULL;
}
내가 CURLOPT_WRITEFUNCTION
의 콜백 DownloadedResponse에서 "작가"JSON 데이터를 얻을 수 있어요 :
이 내 샘플 코드입니다.
하지만 CURLOPT_WRITEDATA의 사용자 정의 포인터를 사용하여 인쇄하는 경우, dataPointer의
char *dataPointer = NULL;
CURLcode curl_easy_setopt(curl, CURLOPT_WRITEDATA, dataPointer);
cout<<dataPointer;
출력은 비어 있습니다. 내가 할 수 당신은 네트워크에서 읽은 데이터를 소요하고 당신이 그것을 원하는 위치에 기록 함수를 작성 CURLOPT_WRITEDATA
가 확실하지 난 당신이 뭘 하려는지 이해합니다. 'CURLOPT_WRITEDATA'는'WRITEFUNCTION' 콜백 ('bufer_in'라고 부름)에 대한 인자를 설정합니다. WRITEDATA 옵션을 설정했는지 여부에 관계없이 읽기 데이터는 여전히'data' 인수로 이동합니다. 이것이 귀하의 질문에 답변이되지 않는 경우, 전체 소스 (귀하가 WRITEDATA를 사용하는 곳)를 제공해주십시오. –
@AndreyTurkin : 데이터 인수로 데이터를 가져올 수 있습니다. 내 요점은 URLcode curl_easy_setopt (컬, CURLOPT_WRITEDATA, dataPointer)를 사용하는 경우입니다; dataPointer가 json 데이터가있는 callback의 buffer_in을 가리키고 있기 때문입니다. buffer_in이 인쇄되면 json 데이터가 출력됩니다. 하지만 buffer_in이 비어있는 것을 가리키는 dataPointer를 인쇄하고 있습니다. – Satish
코드 스 니펫 (snippet)은 curl_easy_setopt를 호출 한 직후 dataPointer에서 마술처럼 결과를 얻으 려한다고 예상 한 것처럼 보였습니다. 분명히 발생할 수는 없습니다. 자,이 전화로 달성하고자하는 것을 정확히 설명해 주시겠습니까? –