我现在正在学习 C,并正在尝试编写一些代码来为工作项目执行 API 信息请求。我正在使用 libcurl 并试图创建一个函数,允许我传入 IVR 号码(我正在 ping 的服务器中的主键)并返回“GET”请求的完整输出。 所以在这种情况下,我希望 permit_activity 返回此 api 将返回的所有 json 数据。
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <curl/curl.h>
#include "Source.h"
#pragma warning(disable : 4996)
//takes an IVR number and returns the full Portland Maps URL for the GET request
char concat_url(char *ivr) {
char *portlandMaps = calloc(200, sizeof(char));
char url1[] = "https://www.portlandmaps.com/api/detail.cfm?detail_type=permit§ions=activity&detail_id=";
char url2[] = "&api_key=330EBBAEA606E8A554E21F9520D02539A&format=json";
strcat(portlandMaps, url1);
strcat(portlandMaps, ivr);
strcat(portlandMaps, url2);
printf("%s\n", portlandMaps);
free(portlandMaps);
return portlandMaps;
}
char permit_activity(char *ivr){
CURL *curl;
CURLcode res;
struct memory chunk;
char data[];
curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, concat_url(ivr));
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, data);
res = curl_easy_perform(curl);
if (res != CURLE_OK)
fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
}
curl_easy_cleanup(curl);
return data;
}
int main() {
char IVR[8];
printf("Please enter an IVR#:...\n");
scanf("%s", IVR);
printf(permit_activity(IVR));
return 0;
}
我遇到的问题是我似乎无法将数据写入 permit_activity 的本地变量,以便我可以从该函数中返回它。 我发现从中获取数据的唯一方法是将其发送到回调函数(CULTOPT_WRITEFUNCTION)或将其写入文件(CURLOPT_WRITEDATA)。
任何关于如何管理这个的建议或关于如何改进我的代码的任何建议将不胜感激。
我一直在尝试使用回调函数,但不知道有什么方法可以在不使用静态或全局变量(或等效变量)的情况下从那里获取数据。将这些数据写入文件也违背了我这样做的目的。如果有一种方法可以将 CURLOPT_WRITEDATA 重定向为写入变量而不是文件,那就太棒了。