Buckets:
| static server_http_res_ptr proxy_request(const server_http_req & req, std::string method) { | |
| std::string target_url = req.get_param("url"); | |
| common_http_url parsed_url = common_http_parse_url(target_url); | |
| if (parsed_url.host.empty()) { | |
| throw std::runtime_error("invalid target URL: missing host"); | |
| } | |
| if (parsed_url.path.empty()) { | |
| parsed_url.path = "/"; | |
| } | |
| if (!parsed_url.password.empty()) { | |
| throw std::runtime_error("authentication in target URL is not supported"); | |
| } | |
| if (parsed_url.scheme != "http" && parsed_url.scheme != "https") { | |
| throw std::runtime_error("unsupported URL scheme in target URL: " + parsed_url.scheme); | |
| } | |
| SRV_INF("proxying %s request to %s://%s:%i%s\n", method.c_str(), parsed_url.scheme.c_str(), parsed_url.host.c_str(), parsed_url.port, parsed_url.path.c_str()); | |
| std::map<std::string, std::string> headers; | |
| for (auto [key, value] : req.headers) { | |
| auto new_key = key; | |
| if (string_starts_with(new_key, "x-proxy-header-")) { | |
| string_replace_all(new_key, "x-proxy-header-", ""); | |
| } | |
| headers[new_key] = value; | |
| } | |
| auto proxy = std::make_unique<server_http_proxy>( | |
| method, | |
| parsed_url.scheme, | |
| parsed_url.host, | |
| parsed_url.port, | |
| parsed_url.path, | |
| headers, | |
| req.body, | |
| req.files, | |
| req.should_stop, | |
| 600, // timeout_read (default to 10 minutes) | |
| 600 // timeout_write (default to 10 minutes) | |
| ); | |
| return proxy; | |
| } | |
| static server_http_context::handler_t proxy_handler_post = [](const server_http_req & req) -> server_http_res_ptr { | |
| return proxy_request(req, "POST"); | |
| }; | |
| static server_http_context::handler_t proxy_handler_get = [](const server_http_req & req) -> server_http_res_ptr { | |
| return proxy_request(req, "GET"); | |
| }; | |
Xet Storage Details
- Size:
- 2.07 kB
- Xet hash:
- b945315bbedd8beb826f5dceb4445edbf7ab318ecbdd16db06727b0b7e76c557
·
Xet efficiently stores files, intelligently splitting them into unique chunks and accelerating uploads and downloads. More info.