Cheetah
FacebookClient.php
Go to the documentation of this file.
1 <?php
24 namespace Facebook;
25 
30 
37 {
41  const BASE_GRAPH_URL = 'https://graph.facebook.com';
42 
46  const BASE_GRAPH_VIDEO_URL = 'https://graph-video.facebook.com';
47 
51  const BASE_GRAPH_URL_BETA = 'https://graph.beta.facebook.com';
52 
56  const BASE_GRAPH_VIDEO_URL_BETA = 'https://graph-video.beta.facebook.com';
57 
61  const DEFAULT_REQUEST_TIMEOUT = 60;
62 
66  const DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT = 3600;
67 
71  const DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT = 7200;
72 
76  protected $enableBetaMode = false;
77 
81  protected $httpClientHandler;
82 
86  public static $requestCount = 0;
87 
94  public function __construct(FacebookHttpClientInterface $httpClientHandler = null, $enableBeta = false)
95  {
96  $this->httpClientHandler = $httpClientHandler ?: $this->detectHttpClientHandler();
97  $this->enableBetaMode = $enableBeta;
98  }
99 
105  public function setHttpClientHandler(FacebookHttpClientInterface $httpClientHandler)
106  {
107  $this->httpClientHandler = $httpClientHandler;
108  }
109 
115  public function getHttpClientHandler()
116  {
117  return $this->httpClientHandler;
118  }
119 
125  public function detectHttpClientHandler()
126  {
127  return extension_loaded('curl') ? new FacebookCurlHttpClient() : new FacebookStreamHttpClient();
128  }
129 
135  public function enableBetaMode($betaMode = true)
136  {
137  $this->enableBetaMode = $betaMode;
138  }
139 
147  public function getBaseGraphUrl($postToVideoUrl = false)
148  {
149  if ($postToVideoUrl) {
150  return $this->enableBetaMode ? static::BASE_GRAPH_VIDEO_URL_BETA : static::BASE_GRAPH_VIDEO_URL;
151  }
152 
153  return $this->enableBetaMode ? static::BASE_GRAPH_URL_BETA : static::BASE_GRAPH_URL;
154  }
155 
163  public function prepareRequestMessage(FacebookRequest $request)
164  {
165  $postToVideoUrl = $request->containsVideoUploads();
166  $url = $this->getBaseGraphUrl($postToVideoUrl) . $request->getUrl();
167 
168  // If we're sending files they should be sent as multipart/form-data
169  if ($request->containsFileUploads()) {
170  $requestBody = $request->getMultipartBody();
171  $request->setHeaders([
172  'Content-Type' => 'multipart/form-data; boundary=' . $requestBody->getBoundary(),
173  ]);
174  } else {
175  $requestBody = $request->getUrlEncodedBody();
176  $request->setHeaders([
177  'Content-Type' => 'application/x-www-form-urlencoded',
178  ]);
179  }
180 
181  return [
182  $url,
183  $request->getMethod(),
184  $request->getHeaders(),
185  $requestBody->getBody(),
186  ];
187  }
188 
198  public function sendRequest(FacebookRequest $request)
199  {
200  if (get_class($request) === 'Facebook\FacebookRequest') {
201  $request->validateAccessToken();
202  }
203 
204  list($url, $method, $headers, $body) = $this->prepareRequestMessage($request);
205 
206  // Since file uploads can take a while, we need to give more time for uploads
207  $timeOut = static::DEFAULT_REQUEST_TIMEOUT;
208  if ($request->containsFileUploads()) {
209  $timeOut = static::DEFAULT_FILE_UPLOAD_REQUEST_TIMEOUT;
210  } elseif ($request->containsVideoUploads()) {
211  $timeOut = static::DEFAULT_VIDEO_UPLOAD_REQUEST_TIMEOUT;
212  }
213 
214  // Should throw `FacebookSDKException` exception on HTTP client error.
215  // Don't catch to allow it to bubble up.
216  $rawResponse = $this->httpClientHandler->send($url, $method, $body, $headers, $timeOut);
217 
218  static::$requestCount++;
219 
220  $returnResponse = new FacebookResponse(
221  $request,
222  $rawResponse->getBody(),
223  $rawResponse->getHttpResponseCode(),
224  $rawResponse->getHeaders()
225  );
226 
227  if ($returnResponse->isError()) {
228  throw $returnResponse->getThrownException();
229  }
230 
231  return $returnResponse;
232  }
233 
243  public function sendBatchRequest(FacebookBatchRequest $request)
244  {
245  $request->prepareRequestsForBatch();
246  $facebookResponse = $this->sendRequest($request);
247 
248  return new FacebookBatchResponse($request, $facebookResponse);
249  }
250 }
Facebook\FacebookClient\detectHttpClientHandler
detectHttpClientHandler()
Definition: FacebookClient.php:125
Facebook\FacebookRequest\validateAccessToken
validateAccessToken()
Definition: FacebookRequest.php:205
Facebook\FacebookRequest\getHeaders
getHeaders()
Definition: FacebookRequest.php:289
Facebook\FacebookRequest\getMultipartBody
getMultipartBody()
Definition: FacebookRequest.php:439
Facebook\FacebookBatchRequest
Definition: FacebookBatchRequest.php:38
Facebook\Exceptions\FacebookSDKException
Definition: FacebookSDKException.php:32
Facebook\HttpClients\FacebookCurlHttpClient
Definition: FacebookCurlHttpClient.php:35
Facebook\FacebookClient\enableBetaMode
enableBetaMode($betaMode=true)
Definition: FacebookClient.php:135
Facebook\FacebookClient\prepareRequestMessage
prepareRequestMessage(FacebookRequest $request)
Definition: FacebookClient.php:163
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\FacebookRequest\containsFileUploads
containsFileUploads()
Definition: FacebookRequest.php:413
php
Facebook\FacebookClient\$httpClientHandler
$httpClientHandler
Definition: FacebookClient.php:81
Facebook\FacebookRequest\getUrl
getUrl()
Definition: FacebookRequest.php:505
Facebook\FacebookResponse
Definition: FacebookResponse.php:36
Facebook\FacebookBatchResponse
Definition: FacebookBatchResponse.php:36
$url
URI MungeSecretKey $url
Definition: URI.MungeSecretKey.txt:14
Facebook\FacebookRequest\getMethod
getMethod()
Definition: FacebookRequest.php:228
Facebook\FacebookClient\setHttpClientHandler
setHttpClientHandler(FacebookHttpClientInterface $httpClientHandler)
Definition: FacebookClient.php:105
Facebook\FacebookClient\getBaseGraphUrl
getBaseGraphUrl($postToVideoUrl=false)
Definition: FacebookClient.php:147
Facebook\FacebookClient\sendBatchRequest
sendBatchRequest(FacebookBatchRequest $request)
Definition: FacebookClient.php:243
Facebook\HttpClients\FacebookHttpClientInterface
Definition: FacebookHttpClientInterface.php:32
Facebook\FacebookBatchRequest\prepareRequestsForBatch
prepareRequestsForBatch()
Definition: FacebookBatchRequest.php:184
Facebook\FacebookClient\sendRequest
sendRequest(FacebookRequest $request)
Definition: FacebookClient.php:198
Facebook\HttpClients\FacebookStreamHttpClient
Definition: FacebookStreamHttpClient.php:30
Facebook
Facebook\FacebookRequest\getUrlEncodedBody
getUrlEncodedBody()
Definition: FacebookRequest.php:451
Facebook\FacebookRequest\setHeaders
setHeaders(array $headers)
Definition: FacebookRequest.php:305
Facebook\FacebookClient
Definition: FacebookClient.php:37
Facebook\FacebookClient\getHttpClientHandler
getHttpClientHandler()
Definition: FacebookClient.php:115
Facebook\FacebookRequest
Definition: FacebookRequest.php:40
Facebook\FacebookRequest\containsVideoUploads
containsVideoUploads()
Definition: FacebookRequest.php:423
Facebook\FacebookClient\__construct
__construct(FacebookHttpClientInterface $httpClientHandler=null, $enableBeta=false)
Definition: FacebookClient.php:94