MCPcopy Create free account
hub / github.com/apache/impala / Do

Method Do

be/src/testutil/http-util.h:42–88  ·  view source on GitHub ↗

Adapted from: http://stackoverflow.com/questions/10982717/get-html-without-header-with-boostasio

Source from the content-addressed store, hash-verified

40 // Adapted from:
41 // http://stackoverflow.com/questions/10982717/get-html-without-header-with-boostasio
42 Status Do(std::ostream* out, int expected_code, const std::string& method) {
43 try {
44 tcp::iostream request_stream;
45 request_stream.connect(host, boost::lexical_cast<std::string>(port));
46 if (!request_stream) return Status("Could not connect request_stream");
47
48 request_stream << method << " " << url_path << " HTTP/1.1\r\n";
49 request_stream << "Host: " << host << ":" << port << "\r\n";
50 request_stream << "Accept: */*\r\n";
51 request_stream << "Cache-Control: no-cache\r\n";
52 if (method == "POST") {
53 request_stream << "Content-Length: 0\r\n";
54 }
55 for (const auto& header : headers) {
56 request_stream << header.first << ": " << header.second << "\r\n";
57 }
58
59 request_stream << "Connection: close\r\n\r\n";
60 request_stream.flush();
61
62 std::string line1;
63 getline(request_stream, line1);
64 if (!request_stream) return Status("No response");
65
66 std::stringstream response_stream(line1);
67 std::string http_version;
68 response_stream >> http_version;
69
70 unsigned int status_code;
71 response_stream >> status_code;
72
73 std::string status_message;
74 getline(response_stream, status_message);
75 if (!response_stream || http_version.substr(0,5) != "HTTP/") {
76 return Status("Malformed response");
77 }
78
79 if (status_code != expected_code) {
80 return Status(strings::Substitute("Unexpected status code: $0", status_code));
81 }
82
83 (*out) << request_stream.rdbuf();
84 return Status::OK();
85 } catch (const std::exception& e){
86 return Status(e.what());
87 }
88 }
89
90 Status Get(ostream* out, int expected_code = 200) {
91 return Do(out, expected_code, "GET");

Callers 1

HttpGetFunction · 0.80

Calls 6

SubstituteFunction · 0.85
OKFunction · 0.85
substrMethod · 0.80
StatusClass · 0.50
connectMethod · 0.45
flushMethod · 0.45

Tested by

no test coverage detected