Я пытаюсь получить доступ к URL-адресу, используя CPPREST http_client :
http://www.20min.ch/rss/rss.tmpl?type=channel&get=68
Я получаю код ответа 302 для URL-перенаправления.
Но когда я пытаюсь получить доступ к тому же URL-адресу с помощью CURL, я получаю CURLE_OK.
Ниже приведены 2 части кода:
используя CURL:
CURL *curl;
CURLcode res;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if(curl){
curl_easy_setopt(curl, CURLOPT_URL, "http://www.20min.ch/rss/rss.tmpl?type=channel&get=68");
res = curl_easy_perform(curl);
if(res != CURLE_OK) {
cout<<"failed";
}
else {
cout<<"success";
}
curl_easy_cleanup(curl);
}
curl_global_cleanup();
Вывод: успех
с помощью КППРЕСТ:
std::string url_= "http://www.20min.ch/rss/rss.tmpl?type=channel&get=68";
try
{
http_client client1(U(url_));
uri_builder builder1(U(""));
client1.request(methods::GET, builder1.to_string()).then([=](http_response response)
{
cout<<"Response code is : "<<response.status_code();
});
}
catch(std::exception& e)
{
cout<<"response :"<<e.what();
}
Вывод :: Код ответа: 302
Я не понимаю, почему две библиотеки ведут себя по-разному для одного и того же URL?
ОБНОВЛЕНИЕ:
Я также пробовал с:
http_client client1(utility::conversions::to_string_t(url_));
а также
http_client client1(U("http://www.20min.ch/rss/rss.tmpl?type=channel&get=68"));
а также
http_client client1(U("http://www.20min.ch/"));
но ответ такой же 302 с отдыхом cpp. [для перекрестной проверки пример bing
работает нормально]
ОБНОВЛЕНИЕ 2:
Метод, объясненный @Matt Weber, кажется очень полезным и законным, но я постоянно получаю код ошибки: 400 для этого, поэтому я попробовал следующие вещи: я попытался установить хост и порт для URL-адреса в uri_builder.
http_client client(U("http://www.20min.ch/rss/"));
uri_builder builder(U("/rss.tmpl"));
builder.append_query(U("type"), U("channel"));
builder.append_query(U("get"), U("68"));
builder.set_host(U("www.20min.ch"));
builder.set_port(U("80"));
client.request(methods::GET, builder.to_string()).then([=](http_response response)
{
cout<<"Received response status code: "<<response.status_code();
});
но все тот же 302.