7 Commits

Author SHA1 Message Date
Ahmad Nassri
53656bf519 Merge pull request #105 from voodoodrul/patch-2
Don't use CURLOPT_CUSTOMREQUEST for POSTs
2016-04-29 19:54:44 -04:00
Ahmad Nassri
889ca14f5f Merge pull request #106 from Lozzano/master
Fixing current version in README.
2016-04-25 10:03:29 -04:00
André Valentin
45274fd536 Fixing current version in README.
The current version wasn't showed as the one people should add in their composer files. Updated from 2.* to 3.*.
2016-04-25 15:02:42 +02:00
Jesse Skrivseth
a3446f6d99 Update Request.php
Remove curl_setopt(self::$handle, CURLOPT_POSTREDIR, 3);  in favor of the caller being well-behaved and setting this option as needed
2016-04-19 23:05:11 -06:00
Jesse Skrivseth
e9ea4dbee2 Don't use CURLOPT_CUSTOMREQUEST for POSTs
I think the current usage of CURLOPT_CUSTOMREQUEST is wrong. As far as I can tell CURLOPT_CUSTOMREQUEST = Method::POST is not the same thing as CURLOPT_POST = true. 

I struggled for hours with POSTed data not being accepted by IIS. First IIS threw an HTTP 411 due to curl not sending a Content-Length header. That is solved by replacing CURLOPT_CUSTOMREQUEST with CURLOPT_POST in the case of actual POSTs. Also, IIS in my case returns an HTTP 301 redirect, which I need Unirest to follow, so I set the CURLOPT_POSTREDIR = 3 in order to let the POST follow on redirect via 301 or 302. 

Notice this: https://curl.haxx.se/libcurl/c/CURLOPT_CUSTOMREQUEST.html - "Many people have wrongly used this option to replace the entire request with their own, including multiple headers and POST contents. While that might work in many cases, it will cause libcurl to send invalid requests and it could possibly confuse the remote server badly. Use CURLOPT_POST and CURLOPT_POSTFIELDS to set POST data. Use CURLOPT_HTTPHEADER to replace or extend the set of headers sent by libcurl. Use CURLOPT_HTTP_VERSION to change HTTP version."

In any case, I know that the CURLOPT_POSTREDIR option probably shouldn't go here and should be client configurable, but I can't find a good place for it. It would be nice to have one-shot $curlOpts passed in with the send method, or curlOpts() that otherwise live for only one curl_exec().
2016-04-19 22:49:27 -06:00
Colin Hutchinson
d71cd15d4a Merge pull request #102 from xcopy/master
Typofix
2016-04-14 08:33:01 -04:00
Kairat Jenishev
2d0cd4c8d9 Typofix 2016-04-14 17:01:32 +06:00
2 changed files with 8 additions and 4 deletions

View File

@@ -37,7 +37,7 @@ To install unirest-php with Composer, just add the following to your `composer.j
```json
{
"require-dev": {
"mashape/unirest-php": "2.*"
"mashape/unirest-php": "3.*"
}
}
```

View File

@@ -159,7 +159,7 @@ class Request
}
/**
* Set a coockie string for enabling coockie handling
* Set a cookie string for enabling cookie handling
*
* @param string $cookie
*/
@@ -169,7 +169,7 @@ class Request
}
/**
* Set a coockie file path for enabling coockie handling
* Set a cookie file path for enabling cookie handling
*
* $cookieFile must be a correct path with write permission
*
@@ -399,7 +399,11 @@ class Request
self::$handle = curl_init();
if ($method !== Method::GET) {
curl_setopt(self::$handle, CURLOPT_CUSTOMREQUEST, $method);
if ($method === Method::POST) {
curl_setopt(self::$handle, CURLOPT_POST, true);
} else {
curl_setopt(self::$handle, CURLOPT_CUSTOMREQUEST, $method);
}
curl_setopt(self::$handle, CURLOPT_POSTFIELDS, $body);
} elseif (is_array($body)) {