Skip to content

Commit e031cd0

Browse files
committed
Fixed php-vcr#48: Allows data to be passed to CURLOPT_POSTFIELDS.
1 parent 60fcffa commit e031cd0

File tree

2 files changed

+38
-6
lines changed

2 files changed

+38
-6
lines changed

src/VCR/Util/CurlHelper.php

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -141,12 +141,13 @@ public static function setCurlOptionOnRequest(Request $request, $option, $value,
141141
}
142142
break;
143143
case CURLOPT_POSTFIELDS:
144-
// check for file @
145-
if (is_string($value)) {
146-
parse_str($value, $value);
147-
}
148-
foreach ($value as $name => $fieldValue) {
149-
$request->setPostField($name, $fieldValue);
144+
// todo: check for file @
145+
if (is_array($value)) {
146+
foreach ($value as $name => $fieldValue) {
147+
$request->setPostField($name, $fieldValue);
148+
}
149+
} else {
150+
$request->setBody($value);
150151
}
151152
break;
152153
case CURLOPT_HTTPHEADER:

tests/VCR/Util/CurlHelperTest.php

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,37 @@ public function getHttpMethodsProvider()
3838
);
3939
}
4040

41+
public function testSetCurlOptionOnRequestPostFieldsQueryString()
42+
{
43+
$request = new Request('POST', 'example.com');
44+
$payload = 'para1=val1&para2=val2';
45+
46+
CurlHelper::setCurlOptionOnRequest($request, CURLOPT_POSTFIELDS, $payload);
47+
48+
$this->assertEquals($payload, (string) $request->getBody());
49+
}
50+
51+
public function testSetCurlOptionOnRequestPostFieldsArray()
52+
{
53+
$request = new Request('POST', 'example.com');
54+
$payload = array('some' => 'test');
55+
56+
CurlHelper::setCurlOptionOnRequest($request, CURLOPT_POSTFIELDS, $payload);
57+
58+
$this->assertNull($request->getBody());
59+
$this->assertEquals($payload, $request->getPostFields()->toArray());
60+
}
61+
62+
public function testSetCurlOptionOnRequestPostFieldsString()
63+
{
64+
$request = new Request('POST', 'example.com');
65+
$payload = json_encode(array('some' => 'test'));
66+
67+
CurlHelper::setCurlOptionOnRequest($request, CURLOPT_POSTFIELDS, $payload);
68+
69+
$this->assertEquals($payload, (string) $request->getBody());
70+
}
71+
4172
public function testSetCurlOptionOnRequestSetSingleHeader()
4273
{
4374
$request = new Request('GET', 'example.com');

0 commit comments

Comments
 (0)