我正在尝试使用 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 的行为不同?
更新 :
我也尝试过:
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。