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 */
24namespace Facebook\HttpClients;
25
26/**
27 * Class FacebookStream
28 *
29 * Abstraction for the procedural stream elements so that the functions can be
30 * mocked and the implementation can be tested.
31 *
32 * @package Facebook
33 */
34class FacebookStream
35{
36    /**
37     * @var resource Context stream resource instance
38     */
39    protected $stream;
40
41    /**
42     * @var array Response headers from the stream wrapper
43     */
44    protected $responseHeaders = [];
45
46    /**
47     * Make a new context stream reference instance
48     *
49     * @param array $options
50     */
51    public function streamContextCreate(array $options)
52    {
53        $this->stream = stream_context_create($options);
54    }
55
56    /**
57     * The response headers from the stream wrapper
58     *
59     * @return array
60     */
61    public function getResponseHeaders()
62    {
63        return $this->responseHeaders;
64    }
65
66    /**
67     * Send a stream wrapped request
68     *
69     * @param string $url
70     *
71     * @return mixed
72     */
73    public function fileGetContents($url)
74    {
75        $rawResponse = file_get_contents($url, false, $this->stream);
76        $this->responseHeaders = $http_response_header ?: [];
77
78        return $rawResponse;
79    }
80}
81