cURL выводит ошибку 301 и 302
Ошибка заключается в том, что при запросе на какой либо сайт cURL вместо сайта выводит 301 moved permanently либо 302 moved.
Код:
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include <sstream>
#include <string>
#include <curl/curl.h>
#include <json/json.h>
auto onDataReceived(char* ptr, std::size_t size, std::size_t nmemb, void* userdata)->std::size_t;
constexpr auto k_max_buffer_size = 4096;
auto main() -> int
{
std::string data;
bool request_complete = true;
if (auto curl = curl_easy_init())
{
curl_easy_setopt(curl, CURLOPT_URL, "vk.com");
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, onDataReceived);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &data);
if (curl_easy_perform(curl) != CURLE_OK)
{
request_complete = false;
std::cerr << "Error : " << curl_easy_perform(curl) << std::endl;
}
curl_easy_cleanup(curl);
}
if (request_complete)
{
std::istringstream stream{ data };
std::cout << data;
}
}
auto onDataReceived(char* ptr, std::size_t size, std::size_t nmemb, void* data) -> std::size_t
{
if (auto str = reinterpret_cast<std::string*>(data))
{
str->append(ptr, nmemb * size);
}
return nmemb * size;
}
Ответы (1 шт):
Автор решения: KoVadim
→ Ссылка
301 - это не ошибка. Это просто сервер с той стороны подсказывает, что запрашиваемый ресурс находится на самом деле по другому адресу. В Вашем случае скорее всего Вы обращаетесь по http, а сервер предлагает перейти на https. Можно это сделать явно:
curl_easy_setopt(curl, CURLOPT_URL, "https://vk.com");
а можно попросить курл самостоятельно разобраться с этим такой строкой
curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L);