我正在尝试获取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();
}
我希望它能产生与邮递员给我的相同的东西,但是看起来我只是得到响应的标题。我忘记了什么?
答案 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);