0%

Cef发送HTTP请求(CefURLRequest)

  • 通过调用CefURLRequest::Create()实现URL请求发送;
  • 请求内容的接受、监控下载进度、下载完成等事件,通过继承虚类CefURLRequestClient来实现;
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include <include/cef_urlrequest.h>

// 请求处理类
class UrlRequestClient; // public CefURLRequestClient

int main()
{
// 填写请求头
CefRequest::HeaderMap headers;
headers.insert(std::make_pair("Accept", "*/*"));

// 构建请求
auto req = CefRequest::Create();
req->SetMethod("GET");
req->SetURL("http://localhost:8080/api/test");
req->GetHeaderMap(headers);

// 创建客户端代理请求
auto client = CefRefPtr<UrlRequestClient>(new UrlRequestClient());
CefURLRequest::Create(req, client, nullptr);

return 0;
}

// 请求处理类 实现
class UrlRequestClient : public CefURLRequestClient
{
public:
UrlRequestClient() = default;

// 收到数据时
void OnDownloadData(CefRefPtr<CefURLRequest> request,
const void* data,
size_t data_length) override
{
m_data += std::string(static_cast<const char*>(data), data_length);
}

bool GetAuthCredentials(bool isProxy,
const CefString& host,
int port,
const CefString& realm,
const CefString& scheme,
CefRefPtr<CefAuthCallback> callback) override
{
return false;
}

// 实时显示下载进度
void OnDownloadProgress(CefRefPtr<CefURLRequest> request,
int64 current,
int64 total) override {}

// 实时显示上传进度
void OnUploadProgress(CefRefPtr<CefURLRequest> request,
int64 current,
int64 total) override {}

void OnRequestComplete(CefRefPtr<CefURLRequest> request) override
{
// 请求完成后,输出内容
std::cout << m_data << std::endl;
}

private:
std::string m_data;

IMPLEMENT_REFCOUNTING(UrlRequestClient);
};