CPPREST http_client を使用して URL にアクセスしようとしています:
http://www.20min.ch/rss/rss.tmpl?type=channel&get=68
URL リダイレクトの応答コード 302 を受け取りました。
しかし、CURL を使用して同じ URL にアクセスしようとすると、CURLE_OK が表示されます。
以下は2つのコードです:
カールを使用:
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();
出力は次のとおりです。成功
CPPREST を使用:
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 に対して 2 つのライブラリの動作が異なる理由がわかりません。
アップデート :
私も試しました:
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/"));
しかし、レスポンスは cpp rest と同じ 302 です。[ クロスチェックの場合 bing の例
正常に動作しています]
更新 2:
@Matt Weber で説明されている方法は非常に役に立ち、正当に思えますが、エラー コード : 400 を継続的に取得しているため、以下のことを試しました: uri_builder で URL のホストとポートを設定しようとしました。
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 です。