CppRest GET无法接收正文?

时间:2018-09-26 13:21:54

标签: postman wikipedia cpprest-sdk

我正在尝试获取Wikipedia页面的修订历史记录的内容,以分析各种修订的日期和大小。

当我在Postman的https://en.wikipedia.org/w/index.php?title=Barbecue&action=history上运行GET时(禁用了Postman设置添加的其他元素之后),我得到的是整个页面以及所有正文的内容。

现在我正在尝试使用以下代码对CPPRESTSDK做同样的事情

#include "cpprest/http_client.h"

using namespace web::http;
using namespace web::http::client;

void main()
{
  http_client mHttpClient(U("https://en.wikipedia.org"));

  http_request mRequest(methods::GET);
  mRequest.set_request_uri(U("w/index.php?title=Barbecue&action=history"));
  mRequest.headers().add(header_names::content_type, U("text/html"));

  http_response wResponse;
  wResponse = mHttpClient.request(mRequest).get();
  ucout << wResponse.to_string();
}

我希望它能产生与邮递员给我的相同的东西,但是看起来我只是得到响应的标题。我忘记了什么?

1 个答案:

答案 0 :(得分:0)

我确实找到了一种方法。

起初,我尝试在Hashmap<String,String>@Multipart @POST("sign-up") Call<SignUpResponse> getSignUpResponse(@Part MultipartBody.Part file, @PartMap() Map<String, String> partMap); ,但是执行阻塞在那里。当我决定阅读wait()的回复http_response时,我发现不仅我收到了完整的回复,而且直到Ragnarok为止,此回复从未结束,并嘲笑char

我的假设是,如果Wiki服务器希望将事件广播到浏览器,则Wiki服务器会保持连接状态,实际上,查看页面的源代码可以找到以下代码:

char

看起来完全可以保持GET请求连接的打开状态:)


这是我最后用来获取页面html的代码。我只是一点一点地阅读它,直到得到-1为止,到目前为止,它确实可以解决问题。如果您这样做,请记住这些服务器的速率限制。刮刮乐!

var messaging = vAPI.messaging;
...
messaging.Connection.pagehide = function() {
   for ( var connection of this.connections.values() ) {
        connection.disconnect();
        connection.handler(connection.toDetails('connectionBroken'));
    }
}.bind(messaging);
window.addEventListener('pagehide', messaging.Connection.pagehide);