original_string: public function buildOptions(Request $request, array $options)
      {
          $headers = [];
          foreach ($request->getHeaders() as $key => $values) {
              $headers[] = $key . ': ' . implode(', ', $values);
          }
  
          $out = [
              CURLOPT_URL => (string)$request->getUri(),
              CURLOPT_HTTP_VERSION => $request->getProtocolVersion(),
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_HEADER => true,
              CURLOPT_HTTPHEADER => $headers
          ];
          switch ($request->getMethod()) {
              case Request::METHOD_GET:
                  $out[CURLOPT_HTTPGET] = true;
                  break;
  
              case Request::METHOD_POST:
                  $out[CURLOPT_POST] = true;
                  break;
  
              default:
                  $out[CURLOPT_POST] = true;
                  $out[CURLOPT_CUSTOMREQUEST] = $request->getMethod();
                  break;
          }
  
          $body = $request->getBody();
          if ($body) {
              $body->rewind();
              $out[CURLOPT_POSTFIELDS] = $body->getContents();
          }
  
          if (empty($options['ssl_cafile'])) {
              $options['ssl_cafile'] = CORE_PATH . 'config' . DIRECTORY_SEPARATOR . 'cacert.pem';
          }
          if (!empty($options['ssl_verify_host'])) {
              // Value of 1 or true is deprecated. Only 2 or 0 should be used now.
              $options['ssl_verify_host'] = 2;
          }
          $optionMap = [
              'timeout' => CURLOPT_TIMEOUT,
              'ssl_verify_peer' => CURLOPT_SSL_VERIFYPEER,
              'ssl_verify_host' => CURLOPT_SSL_VERIFYHOST,
              'ssl_cafile' => CURLOPT_CAINFO,
              'ssl_local_cert' => CURLOPT_SSLCERT,
              'ssl_passphrase' => CURLOPT_SSLCERTPASSWD,
          ];
          foreach ($optionMap as $option => $curlOpt) {
              if (isset($options[$option])) {
                  $out[$curlOpt] = $options[$option];
              }
          }
          if (isset($options['proxy']['proxy'])) {
              $out[CURLOPT_PROXY] = $options['proxy']['proxy'];
          }
          if (isset($options['proxy']['username'])) {
              $password = !empty($options['proxy']['password']) ? $options['proxy']['password'] : '';
              $out[CURLOPT_PROXYUSERPWD] = $options['proxy']['username'] . ':' . $password;
          }
          if (isset($options['curl']) && is_array($options['curl'])) {
              // Can't use array_merge() because keys will be re-ordered.
              foreach ($options['curl'] as $key => $value) {
                  $out[$key] = $value;
              }
          }
  
          return $out;
      }
code: public function buildOptions(Request $request, array $options)
      {
          $headers = [];
          foreach ($request->getHeaders() as $key => $values) {
              $headers[] = $key . ': ' . implode(', ', $values);
          }
  
          $out = [
              CURLOPT_URL => (string)$request->getUri(),
              CURLOPT_HTTP_VERSION => $request->getProtocolVersion(),
              CURLOPT_RETURNTRANSFER => true,
              CURLOPT_HEADER => true,
              CURLOPT_HTTPHEADER => $headers
          ];
          switch ($request->getMethod()) {
              case Request::METHOD_GET:
                  $out[CURLOPT_HTTPGET] = true;
                  break;
  
              case Request::METHOD_POST:
                  $out[CURLOPT_POST] = true;
                  break;
  
              default:
                  $out[CURLOPT_POST] = true;
                  $out[CURLOPT_CUSTOMREQUEST] = $request->getMethod();
                  break;
          }
  
          $body = $request->getBody();
          if ($body) {
              $body->rewind();
              $out[CURLOPT_POSTFIELDS] = $body->getContents();
          }
  
          if (empty($options['ssl_cafile'])) {
              $options['ssl_cafile'] = CORE_PATH . 'config' . DIRECTORY_SEPARATOR . 'cacert.pem';
          }
          if (!empty($options['ssl_verify_host'])) {
              // Value of 1 or true is deprecated. Only 2 or 0 should be used now.
              $options['ssl_verify_host'] = 2;
          }
          $optionMap = [
              'timeout' => CURLOPT_TIMEOUT,
              'ssl_verify_peer' => CURLOPT_SSL_VERIFYPEER,
              'ssl_verify_host' => CURLOPT_SSL_VERIFYHOST,
              'ssl_cafile' => CURLOPT_CAINFO,
              'ssl_local_cert' => CURLOPT_SSLCERT,
              'ssl_passphrase' => CURLOPT_SSLCERTPASSWD,
          ];
          foreach ($optionMap as $option => $curlOpt) {
              if (isset($options[$option])) {
                  $out[$curlOpt] = $options[$option];
              }
          }
          if (isset($options['proxy']['proxy'])) {
              $out[CURLOPT_PROXY] = $options['proxy']['proxy'];
          }
          if (isset($options['proxy']['username'])) {
              $password = !empty($options['proxy']['password']) ? $options['proxy']['password'] : '';
              $out[CURLOPT_PROXYUSERPWD] = $options['proxy']['username'] . ':' . $password;
          }
          if (isset($options['curl']) && is_array($options['curl'])) {
              // Can't use array_merge() because keys will be re-ordered.
              foreach ($options['curl'] as $key => $value) {
                  $out[$key] = $value;
              }
          }
  
          return $out;
      }
code_tokens: public function buildOptions ( Request $ request , array $ options ) { $ headers = [ ] ; foreach ( $ request -> getHeaders ( ) as $ key => $ values ) { $ headers [ ] = $ key . ': ' . implode ( ', ' , $ values ) ; } $ out = [ CURLOPT_URL => ( string ) $ request -> getUri ( ) , CURLOPT_HTTP_VERSION => $ request -> getProtocolVersion ( ) , CURLOPT_RETURNTRANSFER => true , CURLOPT_HEADER => true , CURLOPT_HTTPHEADER => $ headers ] ; switch ( $ request -> getMethod ( ) ) { case Request :: METHOD_GET : $ out [ CURLOPT_HTTPGET ] = true ; break ; case Request :: METHOD_POST : $ out [ CURLOPT_POST ] = true ; break ; default : $ out [ CURLOPT_POST ] = true ; $ out [ CURLOPT_CUSTOMREQUEST ] = $ request -> getMethod ( ) ; break ; } $ body = $ request -> getBody ( ) ; if ( $ body ) { $ body -> rewind ( ) ; $ out [ CURLOPT_POSTFIELDS ] = $ body -> getContents ( ) ; } if ( empty ( $ options [ 'ssl_cafile' ] ) ) { $ options [ 'ssl_cafile' ] = CORE_PATH . 'config' . DIRECTORY_SEPARATOR . 'cacert.pem' ; } if ( ! empty ( $ options [ 'ssl_verify_host' ] ) ) { // Value of 1 or true is deprecated. Only 2 or 0 should be used now. $ options [ 'ssl_verify_host' ] = 2 ; } $ optionMap = [ 'timeout' => CURLOPT_TIMEOUT , 'ssl_verify_peer' => CURLOPT_SSL_VERIFYPEER , 'ssl_verify_host' => CURLOPT_SSL_VERIFYHOST , 'ssl_cafile' => CURLOPT_CAINFO , 'ssl_local_cert' => CURLOPT_SSLCERT , 'ssl_passphrase' => CURLOPT_SSLCERTPASSWD , ] ; foreach ( $ optionMap as $ option => $ curlOpt ) { if ( isset ( $ options [ $ option ] ) ) { $ out [ $ curlOpt ] = $ options [ $ option ] ; } } if ( isset ( $ options [ 'proxy' ] [ 'proxy' ] ) ) { $ out [ CURLOPT_PROXY ] = $ options [ 'proxy' ] [ 'proxy' ] ; } if ( isset ( $ options [ 'proxy' ] [ 'username' ] ) ) { $ password = ! empty ( $ options [ 'proxy' ] [ 'password' ] ) ? $ options [ 'proxy' ] [ 'password' ] : '' ; $ out [ CURLOPT_PROXYUSERPWD ] = $ options [ 'proxy' ] [ 'username' ] . ':' . $ password ; } if ( isset ( $ options [ 'curl' ] ) && is_array ( $ options [ 'curl' ] ) ) { // Can't use array_merge() because keys will be re-ordered. foreach ( $ options [ 'curl' ] as $ key => $ value ) { $ out [ $ key ] = $ value ; } } return $ out ; }
docstring: Convert client options into curl options.
  
  @param \Cake\Http\Client\Request $request The request.
  @param array $options The client options
  @return array
docstring_tokens: Convert client options into curl options .