HTTP запити без CURL

Простий приклад використання об'єкта для HTTP запиту в обхід CURL.

Для цього використовуємо функцію

1
stream_context_create

за допомогою якої формуємо рядка, потім використовуємо

1
fopen

і отримуємо відповідь за допомогою

1
stream_get_contents

Далі власне сам клас:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50 51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75 76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
class Custom_Http_Request
{
    private $ _url;
    private $ _body;
    private $ _method = 'POST';
    private $ _headers = array ();     private $ _response;
    private $ _stream;

    public function __construct ($ url, $ body)
    {
        if (empty ($ url) | | empty ($ body)) {
            throw new Exception ('Both URL and BODY are required'
                              . 'For fetching the request .');         }

        $ This->_url = $ url;
        $ This->_body = $ body;
    }

    public function setMethod ($ method)
    {
        if ('POST' == $ method | | 'GET' == $ method) {
            $ This->_method = $ method;
            return $ this;
        }

        throw new Exception ('Invalid method set .');     }

    public function addHeader (array $ header)
    {
        if (! empty ($ header)) {
            $ This->_headers [] = $ header;
            return $ this;
        }

        throw new Exception ('The headers are empty .');     }

    public function getMethod ()
    {
        return $ this->_method;
    }

    public function getBody ()
    {
        return $ this->_body;
    }

    public function getHeaders ()
    {
        return $ this->_headers;
    }

    public function getResponse ()
    {
        if (is_null ($ this->_stream)) {
            $ This->_openStream ();
        }

        if (is_null ($ this->_response)) {
            $ This->_response = @ stream_get_contents ($ this->_stream);

            if (false === $ this->_response) {
                throw new Exception ('It is not possible to'
                                  . 'Read from the response .');             }
        }

        return $ this->_response;
    }

    private function _assemble ()
    {
        $ Params = array (
            'Http' =>array (
                'Method' =>$ this->_method,
                'Content' =>$ this->_body
            )
        );

        if (! empty ($ this->_headers)) {
            $ Params ['http'] ['header'] = $ this->_headers;
        }

        return stream_context_create ($ params);
    }

    private function _openStream ()
    {
        $ This->_stream = @ fopen ($ this->_url, 'rb', false, $ this->_assemble ());
        if (! $ this->_stream) {
            throw new Exception ('It was not possible to'
                              . "Connect to {$ this->_url }.");         }
    }
}

Буде корисно тим, кому попався хостинг без cURL.

Опубліковано: 28/03/11 @ 01:33
Розділ Пошуковики

Рекомендуємо:

Фріланс. Темна сторона вільного життя
SEO Toolbar для браузера Chrome від SEOmoz
Міфи про description (keywords) і html-коментарі
У GOODAR.com працює Нодар! :)
Як заощадити на ноутбуці 25%