You are here

public function HttpClientCurlDelegate::curl in Http Client 7.2

Same name and namespace in other branches
  1. 6.2 includes/HttpClientCurlDelegate.inc \HttpClientCurlDelegate::curl()

Gets a curl handle for the given request.

1 call to HttpClientCurlDelegate::curl()
HttpClientCurlDelegate::execute in includes/HttpClientCurlDelegate.inc
Executes a request for the HttpClient.

File

includes/HttpClientCurlDelegate.inc, line 41

Class

HttpClientCurlDelegate
A delegate for the HttpClient that uses curl to fetch data.

Code

public function curl(HttpClientRequest $request, $curlopts) {
  $ch = curl_init();
  curl_setopt($ch, CURLOPT_USERAGENT, 'Drupal (+http://drupal.org/)');
  curl_setopt($ch, CURLOPT_HEADER, 1);
  curl_setopt($ch, CURLOPT_CUSTOMREQUEST, $request->method);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_URL, $request
    ->url());

  // Only add Content-Length if we actually have any content or if it is a POST
  // or PUT request. Some non-standard servers get confused by Content-Length in
  // at least HEAD/GET requests, and Squid always requires Content-Length in
  // POST/PUT requests.
  $content_length = strlen($request->data);
  if ($content_length > 0 || $request->method == 'POST' || $request->method == 'PUT') {
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request->data);
  }
  curl_setopt($ch, CURLOPT_HTTPHEADER, $request
    ->getHeaders());
  curl_setopt_array($ch, $curlopts);
  return $ch;
}