大多数情况下,当我通过 libcURL 发布到某个 URL 时,状态代码将是 401,但有时即使我传递的凭据相同,它也会返回我期望的 200。奇怪的是,如果我使用移植到 python 的相同代码并使用 urllib2,我会得到 200 ok,我会得到我需要的数据。这是我用来发布到网站的相关代码。libcURL 对我来说也可以很好地获取此功能所需的凭据,例如 xut_sid 密钥和 cookie,只是这个 url 有时是 401s,有时是 200s。
CURL *curl_handle;
CURLcode res;
struct curl_slist *header = NULL;
MemoryStruct chunk;
...
header = curl_slist_append(header, l->cookie);// l just contains the data I need
header = curl_slist_append(header, l->xut_sid);
header = curl_slist_append(header, "Content-Type: application/json;charset=utf-8");
header = curl_slist_append(header, "x-http-method-override: GET");
curl_handle = curl_easy_init();
curl_easy_setopt(curl_handle, CURLOPT_VERBOSE, 1);
curl_easy_setopt(curl_handle, CURLOPT_URL, searchString);
curl_easy_setopt(curl_handle, CURLOPT_CUSTOMREQUEST, "POST");
curl_easy_setopt(curl_handle, CURLOPT_HTTPHEADER, header);
curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, &chunk);
res = curl_easy_perform(curl_handle);
编辑:我修复了它,我犯了一个愚蠢的错误,xut_sid 会被覆盖(我是 C 的新手,没有使用 strdup 复制字符串)并且不会被发送。我不知道为什么它会出现在详细日志中,但它没有被发送。