From: Philipp Date: Wed, 9 Nov 2022 21:17:31 +0000 (+0100) Subject: Fix Guzzle InvalidArgumentException for POST with array parameters X-Git-Url: https://git.mxchange.org/?a=commitdiff_plain;h=82c631eae34ff24385fc7f243785fea70e224ac2;p=friendica.git Fix Guzzle InvalidArgumentException for POST with array parameters --- diff --git a/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php b/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php index fb51995b3b..7c61b06cfa 100644 --- a/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php +++ b/src/Network/HTTPClient/Capability/ICanSendHttpRequests.php @@ -92,7 +92,7 @@ interface ICanSendHttpRequests * Send POST request to an URL * * @param string $url URL to post - * @param mixed $params array of POST variables + * @param mixed $params POST variables (if an array is passed, it will automatically set as formular parameters) * @param array $headers HTTP headers * @param int $timeout The timeout in seconds, default system config value or 60 seconds * @@ -107,6 +107,7 @@ interface ICanSendHttpRequests * @param string $url Url to send to * @param array $opts (optional parameters) associative array with: * 'body' => (mixed) setting the body for sending data + * 'form_params' => (array) Associative array of form field names to values * 'accept_content' => (string array) supply Accept: header with 'accept_content' as the value * 'timeout' => int Timeout in seconds, default system config value or 60 seconds * 'cookiejar' => path to cookie jar file diff --git a/src/Network/HTTPClient/Client/HttpClient.php b/src/Network/HTTPClient/Client/HttpClient.php index 7974965ac3..cfc8fbfab1 100644 --- a/src/Network/HTTPClient/Client/HttpClient.php +++ b/src/Network/HTTPClient/Client/HttpClient.php @@ -140,6 +140,10 @@ class HttpClient implements ICanSendHttpRequests $conf[RequestOptions::BODY] = $opts[HttpClientOptions::BODY]; } + if (!empty($opts[HttpClientOptions::FORM_PARAMS])) { + $conf[RequestOptions::FORM_PARAMS] = $opts[HttpClientOptions::FORM_PARAMS]; + } + if (!empty($opts[HttpClientOptions::AUTH])) { $conf[RequestOptions::AUTH] = $opts[HttpClientOptions::AUTH]; } @@ -205,7 +209,11 @@ class HttpClient implements ICanSendHttpRequests { $opts = []; - $opts[HttpClientOptions::BODY] = $params; + if (!is_array($params)) { + $opts[HttpClientOptions::BODY] = $params; + } else { + $opts[HttpClientOptions::FORM_PARAMS] = $params; + } if (!empty($headers)) { $opts[HttpClientOptions::HEADERS] = $headers; diff --git a/src/Network/HTTPClient/Client/HttpClientOptions.php b/src/Network/HTTPClient/Client/HttpClientOptions.php index 9a9ee772af..f5ab4c9fb9 100644 --- a/src/Network/HTTPClient/Client/HttpClientOptions.php +++ b/src/Network/HTTPClient/Client/HttpClientOptions.php @@ -59,9 +59,13 @@ class HttpClientOptions const VERIFY = 'verify'; /** - * body: (mixed) Setting the body for sending data + * body: (string) Setting the body for sending data */ const BODY = RequestOptions::BODY; + /** + * form_params: (array) Associative array of form field names to values + */ + const FORM_PARAMS = RequestOptions::FORM_PARAMS; /** * auth: (array) Authentication settings for specific requests */