| 387 | } |
| 388 | |
| 389 | static SC::Result validateRequestShape(const SC::HttpClientRequest& request) |
| 390 | { |
| 391 | SC_TRY(validateRequestUrl(request.url)); |
| 392 | SC_TRY_MSG(isValidRequestMethod(request.method), "HttpClientRequest: invalid request method"); |
| 393 | SC_TRY(validateRequestHeaders(request.headers)); |
| 394 | SC_TRY(validateRequestBodyFramingHeaders(request)); |
| 395 | SC_TRY(validateRequestBodyShape(request.body)); |
| 396 | SC_TRY(validateRequestOptionsShape(request.options)); |
| 397 | |
| 398 | if (request.options.redirect.mode == SC::HttpClientRequestRedirectOptions::FollowGetHead) |
| 399 | { |
| 400 | SC_TRY_MSG(request.method == SC::HttpClientRequest::HttpGET or |
| 401 | request.method == SC::HttpClientRequest::HttpHEAD, |
| 402 | "HttpClientRequest: FollowGetHead requires GET or HEAD"); |
| 403 | } |
| 404 | if (request.options.redirect.mode != SC::HttpClientRequestRedirectOptions::NoRedirects) |
| 405 | { |
| 406 | SC_TRY_MSG((not request.body.isStreamed()) or request.body.canReplay, |
| 407 | "HttpClientRequest: automatic redirects require a replayable request body"); |
| 408 | } |
| 409 | return SC::Result(true); |
| 410 | } |
| 411 | |
| 412 | static SC::Result validateRequestOptionsSupported(const SC::HttpClientRequestOptions& options, |
| 413 | const SC::HttpClientCapabilities& capabilities) |
no test coverage detected