Skip to content

Commit ac08902

Browse files
authored
Merge pull request php-vcr#147 from jamiecuthill/implement_curl_reset
Reset request on curl_reset
2 parents 9f7abeb + 991222e commit ac08902

File tree

4 files changed

+45
-8
lines changed

4 files changed

+45
-8
lines changed

src/VCR/CodeTransform/CurlCodeTransform.php

+2-1
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,8 @@ class CurlCodeTransform extends AbstractCodeTransform
1515
'/(?<!::|->|\w_)\\\?curl_multi_add_handle\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_multi_add_handle(',
1616
'/(?<!::|->|\w_)\\\?curl_multi_remove_handle\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_multi_remove_handle(',
1717
'/(?<!::|->|\w_)\\\?curl_multi_exec\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_multi_exec(',
18-
'/(?<!::|->|\w_)\\\?curl_multi_info_read\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_multi_info_read('
18+
'/(?<!::|->|\w_)\\\?curl_multi_info_read\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_multi_info_read(',
19+
'/(?<!::|->|\w_)\\\?curl_reset\s*\(/i' => '\VCR\LibraryHooks\CurlHook::curl_reset('
1920
);
2021

2122
/**

src/VCR/LibraryHooks/CurlHook.php

+14-7
Original file line numberDiff line numberDiff line change
@@ -171,6 +171,19 @@ public static function curlInit($url = null)
171171
return $curlHandle;
172172
}
173173

174+
/**
175+
* Reset a cURL session.
176+
*
177+
* @link http://www.php.net/manual/en/function.curl-reset.php
178+
* @param resource $curlHandle A cURL handle returned by curl_init().
179+
*/
180+
public static function curlReset($curlHandle)
181+
{
182+
\curl_reset($curlHandle);
183+
self::$requests[(int) $curlHandle] = new Request('GET', null);
184+
self::$curlOptions[(int) $curlHandle] = array();
185+
}
186+
174187
/**
175188
* Perform a cURL session.
176189
*
@@ -185,7 +198,7 @@ public static function curlExec($curlHandle)
185198
{
186199
$request = self::$requests[(int) $curlHandle];
187200
CurlHelper::validateCurlPOSTBody($request, $curlHandle);
188-
201+
189202
$requestCallback = self::$requestCallback;
190203
self::$responses[(int) $curlHandle] = $requestCallback($request);
191204

@@ -202,8 +215,6 @@ public static function curlExec($curlHandle)
202215
* @link http://www.php.net/manual/en/function.curl-multi-add-handle.php
203216
* @param resource $multiHandle A cURL multi handle returned by curl_multi_init().
204217
* @param resource $curlHandle A cURL handle returned by curl_init().
205-
*
206-
* @return integer Returns 0 on success, or one of the CURLM_XXX errors code.
207218
*/
208219
public static function curlMultiAddHandle($multiHandle, $curlHandle)
209220
{
@@ -220,8 +231,6 @@ public static function curlMultiAddHandle($multiHandle, $curlHandle)
220231
* @link http://www.php.net/manual/en/function.curl-multi-remove-handle.php
221232
* @param resource $multiHandle A cURL multi handle returned by curl_multi_init().
222233
* @param resource $curlHandle A cURL handle returned by curl_init().
223-
*
224-
* @return integer Returns 0 on success, or one of the CURLM_XXX error codes.
225234
*/
226235
public static function curlMultiRemoveHandle($multiHandle, $curlHandle)
227236
{
@@ -318,8 +327,6 @@ public static function curlSetopt($curlHandle, $option, $value)
318327
* @link http://www.php.net/manual/en/function.curl-setopt-array.php
319328
* @param resource $curlHandle A cURL handle returned by curl_init().
320329
* @param array $options An array specifying which options to set and their values.
321-
*
322-
* @return boolean|null Returns TRUE if all options were successfully set.
323330
*/
324331
public static function curlSetoptArray($curlHandle, $options)
325332
{

tests/VCR/CodeTransform/CurlCodeTransformTest.php

+4
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@ public function codeSnippetProvider()
3030
array('\VCR\LibraryHooks\CurlHook::curl_multi_remove_handle(', 'curl_multi_remove_handle('),
3131
array('\VCR\LibraryHooks\CurlHook::curl_multi_exec(', 'curl_multi_exec('),
3232
array('\VCR\LibraryHooks\CurlHook::curl_multi_info_read(', 'curl_multi_info_read('),
33+
array('\VCR\LibraryHooks\CurlHook::curl_reset(', 'curl_reset('),
3334

3435
array('\VCR\LibraryHooks\CurlHook::curl_init(', '\\CURL_INIT ('),
3536
array('\VCR\LibraryHooks\CurlHook::curl_exec(', '\\curl_exec('),
@@ -39,6 +40,7 @@ public function codeSnippetProvider()
3940
array('\VCR\LibraryHooks\CurlHook::curl_multi_remove_handle(', '\\curl_multi_remove_handle('),
4041
array('\VCR\LibraryHooks\CurlHook::curl_multi_exec(', '\\curl_multi_exec('),
4142
array('\VCR\LibraryHooks\CurlHook::curl_multi_info_read(', '\\curl_multi_info_read('),
43+
array('\VCR\LibraryHooks\CurlHook::curl_reset(', '\\curl_reset('),
4244

4345
array('SomeClass::CURL_INIT (', 'SomeClass::CURL_INIT ('),
4446
array('SomeClass::curl_exec(', 'SomeClass::curl_exec('),
@@ -48,6 +50,7 @@ public function codeSnippetProvider()
4850
array('SomeClass::curl_multi_remove_handle(', 'SomeClass::curl_multi_remove_handle('),
4951
array('SomeClass::curl_multi_exec(', 'SomeClass::curl_multi_exec('),
5052
array('SomeClass::curl_multi_info_read(', 'SomeClass::curl_multi_info_read('),
53+
array('SomeClass::curl_reset(', 'SomeClass::curl_reset('),
5154

5255
array('$object->CURL_INIT (', '$object->CURL_INIT ('),
5356
array('$object->curl_exec(', '$object->curl_exec('),
@@ -57,6 +60,7 @@ public function codeSnippetProvider()
5760
array('$object->curl_multi_remove_handle(', '$object->curl_multi_remove_handle('),
5861
array('$object->curl_multi_exec(', '$object->curl_multi_exec('),
5962
array('$object->curl_multi_info_read(', '$object->curl_multi_info_read('),
63+
array('$object->curl_reset(', '$object->curl_reset('),
6064

6165
array('function send_http_asynchronous_curl_exec(', 'function send_http_asynchronous_curl_exec(')
6266
);

tests/VCR/LibraryHooks/CurlHookTest.php

+25
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,31 @@ function () use ($testClass) {
303303
curl_multi_close($curlMultiHandle);
304304
}
305305

306+
/**
307+
* @requires PHP 5.5.0
308+
*/
309+
public function testShouldResetRequest()
310+
{
311+
$testClass = $this;
312+
$this->curlHook->enable(
313+
function (Request $request) use ($testClass) {
314+
$testClass->assertEquals(
315+
'GET',
316+
$request->getMethod(),
317+
''
318+
);
319+
return new Response(200);
320+
}
321+
);
322+
323+
$curlHandle = curl_init("http://example.com");
324+
curl_setopt($curlHandle, CURLOPT_CUSTOMREQUEST, "DELETE");
325+
curl_reset($curlHandle);
326+
curl_exec($curlHandle);
327+
328+
$this->curlHook->disable();
329+
}
330+
306331
/**
307332
* @return \callable
308333
*/

0 commit comments

Comments
 (0)