From f68e20dd720e9d016112800a82d711025ae82ade Mon Sep 17 00:00:00 2001 From: Denny Septian Panggabean Date: Thu, 15 May 2025 09:14:39 +0700 Subject: [PATCH 1/3] feat: added options fresh_connect to CURLRequest --- system/HTTP/CURLRequest.php | 6 +++++- tests/system/HTTP/CURLRequestTest.php | 22 ++++++++++++++++++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/system/HTTP/CURLRequest.php b/system/HTTP/CURLRequest.php index ef5d10880ae6..f160f0932733 100644 --- a/system/HTTP/CURLRequest.php +++ b/system/HTTP/CURLRequest.php @@ -365,7 +365,6 @@ public function send(string $method, string $url) $curlOptions[CURLOPT_URL] = $url; $curlOptions[CURLOPT_RETURNTRANSFER] = true; $curlOptions[CURLOPT_HEADER] = true; - $curlOptions[CURLOPT_FRESH_CONNECT] = true; // Disable @file uploads in post data. $curlOptions[CURLOPT_SAFE_UPLOAD] = true; @@ -621,6 +620,11 @@ protected function setCURLOptions(array $curlOptions = [], array $config = []) $curlOptions[CURLOPT_DNS_CACHE_TIMEOUT] = (int) $config['dns_cache_timeout']; } + // Fresh Connect (default true) + $curlOptions[CURLOPT_FRESH_CONNECT] = isset($config['fresh_connect']) && is_bool($config['fresh_connect']) + ? $config['fresh_connect'] + : true; + // Timeout $curlOptions[CURLOPT_TIMEOUT_MS] = (float) $config['timeout'] * 1000; diff --git a/tests/system/HTTP/CURLRequestTest.php b/tests/system/HTTP/CURLRequestTest.php index b44fbe4db99f..508c4f2f314f 100644 --- a/tests/system/HTTP/CURLRequestTest.php +++ b/tests/system/HTTP/CURLRequestTest.php @@ -583,6 +583,28 @@ public function testProxyuOption(): void $this->assertTrue($options[CURLOPT_HTTPPROXYTUNNEL]); } + public function testFreshConnectDefault(): void + { + $this->request->request('get', 'http://example.com'); + + $options = $this->request->curl_options; + + $this->assertArrayHasKey(CURLOPT_FRESH_CONNECT, $options); + $this->assertTrue($options[CURLOPT_FRESH_CONNECT]); + } + + public function testFreshConnectFalseOption(): void + { + $this->request->request('get', 'http://example.com', [ + 'fresh_connect' => false, + ]); + + $options = $this->request->curl_options; + + $this->assertArrayHasKey(CURLOPT_FRESH_CONNECT, $options); + $this->assertFalse($options[CURLOPT_FRESH_CONNECT]); + } + public function testDebugOptionTrue(): void { $this->request->request('get', 'http://example.com', [ From 6a0356eeac2a47cbc1e2300b346b7dc2d085dcc5 Mon Sep 17 00:00:00 2001 From: Denny Septian Panggabean Date: Thu, 15 May 2025 09:26:55 +0700 Subject: [PATCH 2/3] docs: added options fresh_connect to CURLRequest --- user_guide_src/source/changelogs/v4.7.0.rst | 1 + user_guide_src/source/libraries/curlrequest.rst | 9 +++++++++ user_guide_src/source/libraries/curlrequest/038.php | 4 ++++ 3 files changed, 14 insertions(+) create mode 100644 user_guide_src/source/libraries/curlrequest/038.php diff --git a/user_guide_src/source/changelogs/v4.7.0.rst b/user_guide_src/source/changelogs/v4.7.0.rst index a91cb468f542..7645847c59e9 100644 --- a/user_guide_src/source/changelogs/v4.7.0.rst +++ b/user_guide_src/source/changelogs/v4.7.0.rst @@ -39,6 +39,7 @@ Libraries ========= - **CURLRequest:** Added ``dns_cache_timeout`` option to change default DNS cache timeout. +- **CURLRequest:** Added ``fresh_connect`` options to enable/disabled request fresh connection. - **Email:** Added support for choosing the SMTP authorization method. You can change it via ``Config\Email::$SMTPAuthMethod`` option. - **Image:** The ``ImageMagickHandler`` has been rewritten to rely solely on the PHP ``imagick`` extension. - **Image:** Added ``ImageMagickHandler::clearMetadata()`` method to remove image metadata for privacy protection. diff --git a/user_guide_src/source/libraries/curlrequest.rst b/user_guide_src/source/libraries/curlrequest.rst index 45de3ae5cdd6..e9665035adb4 100644 --- a/user_guide_src/source/libraries/curlrequest.rst +++ b/user_guide_src/source/libraries/curlrequest.rst @@ -278,6 +278,15 @@ if it's not already set: .. _curlrequest-request-options-headers: +fresh_connect +============= + +.. versionadded:: 4.7.0 + +You can send request as fresh connection by the ``fresh_connect`` option: + +.. literalinclude:: curlrequest/038.php + headers ======= diff --git a/user_guide_src/source/libraries/curlrequest/038.php b/user_guide_src/source/libraries/curlrequest/038.php new file mode 100644 index 000000000000..83e971d2782a --- /dev/null +++ b/user_guide_src/source/libraries/curlrequest/038.php @@ -0,0 +1,4 @@ +request('GET', 'http://example.com', ['fresh_connect' => true]); +$client->request('GET', 'http://example.com', ['fresh_connect' => false]); From d82fc552ecbcae30a324075f8c5f8d53fafa1753 Mon Sep 17 00:00:00 2001 From: Denny Septian Panggabean Date: Thu, 15 May 2025 13:52:48 +0700 Subject: [PATCH 3/3] docs: mention default value --- user_guide_src/source/libraries/curlrequest.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/user_guide_src/source/libraries/curlrequest.rst b/user_guide_src/source/libraries/curlrequest.rst index e9665035adb4..8be3b098b287 100644 --- a/user_guide_src/source/libraries/curlrequest.rst +++ b/user_guide_src/source/libraries/curlrequest.rst @@ -283,7 +283,7 @@ fresh_connect .. versionadded:: 4.7.0 -You can send request as fresh connection by the ``fresh_connect`` option: +By default, the request is sent using a fresh connection. You can disable this behavior using the ``fresh_connect`` option: .. literalinclude:: curlrequest/038.php