使用C ++& cURL,如何通过url获取需要用户ID&密码

时间:2017-02-20 03:46:25

标签: c++ curl

您好我正在尝试使用c ++和cURL来获取图片。

我找到了这个代码并且它有效。然而,需要ID和ID的网址图像密码,这段代码没用。

#include <stdio.h>
#include <curl/curl.h>

size_t callbackfunction(void *ptr, size_t size, size_t nmemb, void* userdata)
{
FILE* stream = (FILE*)userdata;
if (!stream)
{
    printf("!!! No stream\n");
    return 0;
}

size_t written = fwrite((FILE*)ptr, size, nmemb, stream);
return written;
}

bool download_jpeg(char* url)
{
FILE* fp = fopen("out.jpg", "wb");
if (!fp)
{
    printf("!!! Failed to create file on the disk\n");
    return false;
}

CURL* curlCtx = curl_easy_init();
curl_easy_setopt(curlCtx, CURLOPT_URL, url);
curl_easy_setopt(curlCtx, CURLOPT_WRITEDATA, fp);
curl_easy_setopt(curlCtx, CURLOPT_WRITEFUNCTION, callbackfunction);
curl_easy_setopt(curlCtx, CURLOPT_FOLLOWLOCATION, 1);

CURLcode rc = curl_easy_perform(curlCtx);
if (rc)
{
    printf("!!! Failed to download: %s\n", url);
    return false;
}

long res_code = 0;
curl_easy_getinfo(curlCtx, CURLINFO_RESPONSE_CODE, &res_code);
if (!((res_code == 200 || res_code == 201) && rc != CURLE_ABORTED_BY_CALLBACK))
{
    printf("!!! Response code: %d\n", res_code);
    return false;
}

curl_easy_cleanup(curlCtx);

fclose(fp);

return true;
}

int main(int argc, char** argv)
{
if (argc < 2)
{
   printf("Usage: %s <url>\n", argv[0]);
   return -1;
}

if (!download_jpeg(argv[1]))
{
    printf("!! Failed to download file: %s\n", argv[1]);
    return -1;
}

return 0;
}

我该添加什么?请帮忙。

1 个答案:

答案 0 :(得分:0)

您可以使用curl的CURLOPT_USERPWD选项访问 HTTP身份验证的内置功能,也可以使用CURLOPT_HTTPAUTH设置身份验证类型

示例

curl_easy_setopt(curl, CURLOPT_HTTPAUTH, (long)CURLAUTH_ANY);
curl_easy_setopt(curl, CURLOPT_USERPWD, "user:password");

Source

HTTPAUTH documentation

USERPWD documentation