コード例 #1
0
ファイル: CurlHelper.php プロジェクト: alnutile/drunatra
 /**
  * Sets a cURL option on a Request.
  *
  * @param Request  $request Request to set cURL option to.
  * @param integer  $option  cURL option to set.
  * @param mixed    $value   Value of the cURL option.
  * @param resource $curlHandle cURL handle where this option is set on (optional).
  */
 public static function setCurlOptionOnRequest(Request $request, $option, $value, $curlHandle = null)
 {
     switch ($option) {
         case CURLOPT_URL:
             $request->setUrl($value);
             break;
         case CURLOPT_FOLLOWLOCATION:
             $request->getParams()->set('redirect.disable', !$value);
             break;
         case CURLOPT_MAXREDIRS:
             $request->getParams()->set('redirect.max', $value);
             break;
         case CURLOPT_CUSTOMREQUEST:
             $request->setMethod($value);
             break;
         case CURLOPT_POST:
             if ($value == true) {
                 $request->setMethod('POST');
             }
             break;
         case CURLOPT_POSTFIELDS:
             // todo: check for file @
             if (is_array($value)) {
                 foreach ($value as $name => $fieldValue) {
                     $request->setPostField($name, $fieldValue);
                 }
                 if (count($value) == 0) {
                     $request->removeHeader('Content-Type');
                 }
             } else {
                 $request->setBody($value);
             }
             break;
         case CURLOPT_HTTPHEADER:
             foreach ($value as $header) {
                 $headerParts = explode(': ', $header, 2);
                 if (isset($headerParts[1])) {
                     $request->setHeader($headerParts[0], $headerParts[1]);
                 }
             }
             break;
         case CURLOPT_HEADER:
         case CURLOPT_WRITEFUNCTION:
         case CURLOPT_HEADERFUNCTION:
             // Ignore writer and header functions.
             // These options are stored and will be handled later in handleOutput().
             break;
         case CURLOPT_READFUNCTION:
             // Guzzle provides a callback to let curl read the body string.
             // To get the body, this callback is called manually.
             $bodySize = $request->getCurlOptions()->get(CURLOPT_INFILESIZE);
             Assertion::notEmpty($bodySize, "To set a CURLOPT_READFUNCTION, CURLOPT_INFILESIZE must be set.");
             $body = call_user_func_array($value, array($curlHandle, fopen('php://memory', 'r'), $bodySize));
             $request->setBody($body);
             break;
         default:
             $request->getCurlOptions()->set($option, $value);
             break;
     }
 }