/************* Restget C++ Program Source Code File (.CPP) *************/ /* Adapted from the sample program of the Casablanca tutorial. */ /* Copyright Olivier Bertrand 2019. */ /***********************************************************************/ #include <cpprest/filestream.h> #include <cpprest/http_client.h>
usingnamespace utility::conversions; // String conversions utilities usingnamespace web; // Common features like URIs. usingnamespace web::http; // Common HTTP functionality usingnamespace web::http::client; // HTTP client features usingnamespace concurrency::streams; // Asynchronous streams
/***********************************************************************/ /* Make a local copy of the requested file. */ /***********************************************************************/ int restGetFile(char *m, bool xt, PCSZ http, PCSZ uri, PCSZ fn)
{ int rc = 0; auto fileStream = std::make_shared<ostream>();
if (!http || !fn) { //strcpy(g->Message, "Missing http or filename");
strcpy(m, "Missing http or filename"); return2;
} // endif
if (xt)
fprintf(stderr, "restGetFile: fn=%s\n", fn);
// Open stream to output file.
pplx::task<void> requestTask = fstream::open_ostream(to_string_t(fn))
.then([=](ostream outFile) {
*fileStream= outFile;
if (xt)
fprintf(stderr, "Outfile isopen=%d\n", outFile.is_open());
// Create http_client to send the request.
http_client client(to_string_t(http));
if (uri) { // Build request URI and start the request.
uri_builder builder(to_string_t(uri)); return client.request(methods::GET, builder.to_string());
} else return client.request(methods::GET);
})
// Handle response headers arriving.
.then([=](http_response response) { if (xt)
fprintf(stderr, "Received response status code:%u\n",
response.status_code());
// Write response body into the file. return response.body().read_to_end(fileStream->streambuf());
})
// Close the file stream.
.then([=](size_t n) { if (xt)
fprintf(stderr, "Return size=%zu\n", n);
return fileStream->close();
});
// Wait for all the outstanding I/O to complete and handle any exceptions try { if (xt)
fprintf(stderr, "Waiting\n");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.