Subversion Repositories cheapmusic

Rev

Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
25 - 1
<?php
2
/**
3
 * Copyright 2017 Facebook, Inc.
4
 *
5
 * You are hereby granted a non-exclusive, worldwide, royalty-free license to
6
 * use, copy, modify, and distribute this software in source code or binary
7
 * form for use in connection with the web services and APIs provided by
8
 * Facebook.
9
 *
10
 * As with any software that integrates with the Facebook platform, your use
11
 * of this software is subject to the Facebook Developer Principles and
12
 * Policies [http://developers.facebook.com/policy/]. This copyright notice
13
 * shall be included in all copies or substantial portions of the software.
14
 *
15
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
18
 * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
20
 * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
21
 * DEALINGS IN THE SOFTWARE.
22
 *
23
 */
24
namespace Facebook\HttpClients;
25
 
26
use Facebook\Http\GraphRawResponse;
27
use Facebook\Exceptions\FacebookSDKException;
28
 
29
use GuzzleHttp\Client;
30
use GuzzleHttp\Message\ResponseInterface;
31
use GuzzleHttp\Ring\Exception\RingException;
32
use GuzzleHttp\Exception\RequestException;
33
 
34
class FacebookGuzzleHttpClient implements FacebookHttpClientInterface
35
{
36
    /**
37
     * @var \GuzzleHttp\Client The Guzzle client.
38
     */
39
    protected $guzzleClient;
40
 
41
    /**
42
     * @param \GuzzleHttp\Client|null The Guzzle client.
43
     */
44
    public function __construct(Client $guzzleClient = null)
45
    {
46
        $this->guzzleClient = $guzzleClient ?: new Client();
47
    }
48
 
49
    /**
50
     * @inheritdoc
51
     */
52
    public function send($url, $method, $body, array $headers, $timeOut)
53
    {
54
        $options = [
55
            'headers' => $headers,
56
            'body' => $body,
57
            'timeout' => $timeOut,
58
            'connect_timeout' => 10,
59
            'verify' => __DIR__ . '/certs/DigiCertHighAssuranceEVRootCA.pem',
60
        ];
61
        $request = $this->guzzleClient->createRequest($method, $url, $options);
62
 
63
        try {
64
            $rawResponse = $this->guzzleClient->send($request);
65
        } catch (RequestException $e) {
66
            $rawResponse = $e->getResponse();
67
 
68
            if ($e->getPrevious() instanceof RingException || !$rawResponse instanceof ResponseInterface) {
69
                throw new FacebookSDKException($e->getMessage(), $e->getCode());
70
            }
71
        }
72
 
73
        $rawHeaders = $this->getHeadersAsString($rawResponse);
74
        $rawBody = $rawResponse->getBody();
75
        $httpStatusCode = $rawResponse->getStatusCode();
76
 
77
        return new GraphRawResponse($rawHeaders, $rawBody, $httpStatusCode);
78
    }
79
 
80
    /**
81
     * Returns the Guzzle array of headers as a string.
82
     *
83
     * @param ResponseInterface $response The Guzzle response.
84
     *
85
     * @return string
86
     */
87
    public function getHeadersAsString(ResponseInterface $response)
88
    {
89
        $headers = $response->getHeaders();
90
        $rawHeaders = [];
91
        foreach ($headers as $name => $values) {
92
            $rawHeaders[] = $name . ": " . implode(", ", $values);
93
        }
94
 
95
        return implode("\r\n", $rawHeaders);
96
    }
97
}