Cheetah
FacebookCurlHttpClient.php
Go to the documentation of this file.
1 <?php
24 namespace Facebook\HttpClients;
25 
28 
35 {
39  protected $curlErrorMessage = '';
40 
44  protected $curlErrorCode = 0;
45 
49  protected $rawResponse;
50 
54  protected $facebookCurl;
55 
59  public function __construct(FacebookCurl $facebookCurl = null)
60  {
61  $this->facebookCurl = $facebookCurl ?: new FacebookCurl();
62  }
63 
67  public function send($url, $method, $body, array $headers, $timeOut)
68  {
69  $this->openConnection($url, $method, $body, $headers, $timeOut);
70  $this->sendRequest();
71 
72  if ($curlErrorCode = $this->facebookCurl->errno()) {
73  throw new FacebookSDKException($this->facebookCurl->error(), $curlErrorCode);
74  }
75 
76  // Separate the raw headers from the raw body
77  list($rawHeaders, $rawBody) = $this->extractResponseHeadersAndBody();
78 
79  $this->closeConnection();
80 
81  return new GraphRawResponse($rawHeaders, $rawBody);
82  }
83 
93  public function openConnection($url, $method, $body, array $headers, $timeOut)
94  {
95  $options = [
96  CURLOPT_CUSTOMREQUEST => $method,
97  CURLOPT_HTTPHEADER => $this->compileRequestHeaders($headers),
98  CURLOPT_URL => $url,
99  CURLOPT_CONNECTTIMEOUT => 10,
100  CURLOPT_TIMEOUT => $timeOut,
101  CURLOPT_RETURNTRANSFER => true, // Return response as string
102  CURLOPT_HEADER => true, // Enable header processing
103  CURLOPT_SSL_VERIFYHOST => 2,
104  CURLOPT_SSL_VERIFYPEER => true,
105  CURLOPT_CAINFO => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
106  ];
107 
108  if ($method !== "GET") {
109  $options[CURLOPT_POSTFIELDS] = $body;
110  }
111 
112  $this->facebookCurl->init();
113  $this->facebookCurl->setoptArray($options);
114  }
115 
119  public function closeConnection()
120  {
121  $this->facebookCurl->close();
122  }
123 
127  public function sendRequest()
128  {
129  $this->rawResponse = $this->facebookCurl->exec();
130  }
131 
139  public function compileRequestHeaders(array $headers)
140  {
141  $return = [];
142 
143  foreach ($headers as $key => $value) {
144  $return[] = $key . ': ' . $value;
145  }
146 
147  return $return;
148  }
149 
156  {
157  $parts = explode("\r\n\r\n", $this->rawResponse);
158  $rawBody = array_pop($parts);
159  $rawHeaders = implode("\r\n\r\n", $parts);
160 
161  return [trim($rawHeaders), trim($rawBody)];
162  }
163 }
Facebook\HttpClients\FacebookCurlHttpClient\closeConnection
closeConnection()
Definition: FacebookCurlHttpClient.php:119
Facebook\HttpClients\FacebookCurlHttpClient\send
send($url, $method, $body, array $headers, $timeOut)
Definition: FacebookCurlHttpClient.php:67
Facebook\HttpClients\FacebookCurlHttpClient\$facebookCurl
$facebookCurl
Definition: FacebookCurlHttpClient.php:54
Facebook\HttpClients\FacebookCurlHttpClient
Definition: FacebookCurlHttpClient.php:35
Facebook\Exceptions\FacebookSDKException
Definition: FacebookSDKException.php:32
Facebook\HttpClients\FacebookCurlHttpClient\$curlErrorMessage
$curlErrorMessage
Definition: FacebookCurlHttpClient.php:39
use
GNU LESSER GENERAL PUBLIC LICENSE February Free Software Inc Franklin Fifth MA USA Everyone is permitted to copy and distribute verbatim copies of this license but changing it is not allowed[This is the first released version of the Lesser GPL. It also counts as the successor of the GNU Library Public License, version 2, hence the version number 2.1.] Preamble The licenses for most software are designed to take away your freedom to share and change it By the GNU General Public Licenses are intended to guarantee your freedom to share and change free software to make sure the software is free for all its users This the Lesser General Public applies to some specially designated software packages typically libraries of the Free Software Foundation and other authors who decide to use it You can use it but we suggest you first think carefully about whether this license or the ordinary General Public License is the better strategy to use in any particular based on the explanations below When we speak of free we are referring to freedom of use
Definition: license.txt:27
Facebook\HttpClients\FacebookCurlHttpClient\compileRequestHeaders
compileRequestHeaders(array $headers)
Definition: FacebookCurlHttpClient.php:139
php
Facebook\HttpClients\FacebookCurlHttpClient\openConnection
openConnection($url, $method, $body, array $headers, $timeOut)
Definition: FacebookCurlHttpClient.php:93
Facebook\HttpClients\FacebookCurlHttpClient\__construct
__construct(FacebookCurl $facebookCurl=null)
Definition: FacebookCurlHttpClient.php:59
Facebook\HttpClients\FacebookCurlHttpClient\extractResponseHeadersAndBody
extractResponseHeadersAndBody()
Definition: FacebookCurlHttpClient.php:155
$url
URI MungeSecretKey $url
Definition: URI.MungeSecretKey.txt:14
Facebook\HttpClients\FacebookHttpClientInterface
Definition: FacebookHttpClientInterface.php:32
Facebook\HttpClients\FacebookCurlHttpClient\$rawResponse
$rawResponse
Definition: FacebookCurlHttpClient.php:49
Facebook\HttpClients\FacebookCurl
Definition: FacebookCurl.php:34
Facebook\HttpClients
Definition: FacebookCurl.php:24
Facebook\HttpClients\FacebookCurlHttpClient\sendRequest
sendRequest()
Definition: FacebookCurlHttpClient.php:127
as
as
Definition: Filter.ExtractStyleBlocks.Escaping.txt:10
Facebook\HttpClients\FacebookCurlHttpClient\$curlErrorCode
$curlErrorCode
Definition: FacebookCurlHttpClient.php:44
Facebook\Http\GraphRawResponse
Definition: GraphRawResponse.php:32