root/dev/common/includes/class.http.php @ 190

Revision 190, 4.9 KB (checked in by exi, 16 years ago)

This is a big update...
Moved all admin scripts to common/admin.
Moved all includes and classes to common/includes.
Edited all include-paths to reflect the movement.
Fixed a bug with the session system allowing every registered user to access admin pages.
Replaced calls to date() to use a wrapper so gmdate can be used.
Replaced some calls to $config with calls to the static object.
Fixed a big which caused the portrait_grab to not download a new picute.
Added a classified-state to kills.
Removed the sync_server server script in this tree.
Added code to help modules find the includes to index.php.

Line 
1<?php
2/*
3 * http_request class
4 *
5 * useful to avoid allow_url_fopen_wrapper issues
6 * and to get or post data from anywhere we want
7 *
8 */
9
10class http_request
11{
12    function http_request($url = '', $method = 'GET')
13    {
14        if ($url)
15        {
16            $this->url = parse_url($url);
17        }
18        $this->useragent = 'Mozilla/4.0 (compatible)';
19        $this->method = $method;
20        $this->postform = array();
21        $this->postdata = array();
22        $this->headers = array();
23        $this->socket_timeout = 5;
24    }
25
26    // socket timeout is the amount of time in second which is waited
27    // for incoming data, set higher if you request stuff from heavy-loaded
28    // scripts or compressed data streams
29    function setSockettimeout($int)
30    {
31        $this->socket_timeout = $int;
32    }
33
34    function get_content()
35    {
36        $this->request();
37        return $this->content;
38    }
39
40    function get_header()
41    {
42        $this->request();
43        return $this->header;
44    }
45
46    function get_sent()
47    {
48        return $this->sent;
49    }
50
51    function get_recv()
52    {
53        return $this->recv;
54    }
55
56    function connect()
57    {
58        if ($this->fp)
59        {
60            return true;
61        }
62
63        $this->fp = @fsockopen($this->url["host"], 80, $errno, $errstr, 5);
64        if (!$this->fp)
65        {
66            $this->_errno = $errno;
67            $this->_errstr = $errstr;
68            return false;
69        }
70        return true;
71    }
72
73    function getError()
74    {
75        return 'Error occured with fsockopen: '.$this->_errstr.' ('.$this->_errno.')<br/>'."\n";
76    }
77
78    function request()
79    {
80        if ($this->requested)
81        {
82            return;
83        }
84        $this->connect();
85        $fp = &$this->fp;
86
87        if (!is_resource($fp))
88        {
89            return false;
90        }
91
92        // define a linefeed (carriage return + newline)
93        $lf = "\r\n";
94
95        $request_string = $this->method.' '.$this->url['path'].'?'.$this->url['query'].' HTTP/1.0'.$lf
96                          .'Accept-Language: en'.$lf
97                          .'User-Agent: '.$this->useragent.$lf
98                          .'Host: '.$this->url['host'].$lf
99                          .'Connection: close'.$lf;
100        if (count($this->headers))
101        {
102            $request_string .= join($lf, $this->headers).$lf;
103        }
104        if ($this->method == 'POST')
105        {
106            $boundary = substr(md5(rand(0,32000)),0,10);
107            $data = '--'.$boundary.$lf;
108
109            foreach ($this->postform as $name => $content_file)
110            {
111                $data .= 'Content-Disposition: form-data; name="'.$name.'"'.$lf.$lf;
112                $data .= $content_file.$lf;
113                $data .= '--'.$boundary.$lf;
114            }
115
116            foreach ($this->postdata as $name => $content_file)
117            {
118                $data .= 'Content-Disposition: form-data; name="'.$name.'"; filename="'.$name.'"'.$lf;
119                $data .= 'Content-Type: text/plain'.$lf.$lf;
120                $data .= $content_file.$lf;
121                $data .= '--'.$boundary.$lf;
122            }
123
124            $request_string .= 'Content-Length: '.strlen($data).$lf;
125            $request_string .= 'Content-Type: multipart/form-data, boundary='.$boundary.$lf;
126        }
127        else
128        {
129            $data = '';
130        }
131        $request_string .= $lf;
132
133        fputs($fp, $request_string.$data);
134        $this->sent = strlen($header)+strlen($data);
135
136        $header = 1;
137        socket_set_timeout($fp, $this->socket_timeout);
138        while ($line = fgets($fp, 4096))
139        {
140            if ($header)
141            {
142                $http_header .= $line;
143            }
144            else
145            {
146                $file .= $line;
147            }
148            if ($header && $line == $lf)
149            {
150                $header = 0;
151            }
152        }
153        $this->status = socket_get_status($fp);
154        fclose($fp);
155        $this->header = $http_header;
156        $this->content = $file;
157        $this->recv = strlen($http_header)+strlen($file);
158        $this->requested = true;
159    }
160
161    function url($url)
162    {
163        $this->url = parse_url($url);
164    }
165
166    // this is to send file-data to be accessed with $_FILES[$name]
167    function set_postdata($name, $data)
168    {
169        $this->method = 'POST';
170        $this->postdata[$name] = $data;
171    }
172
173    // this function sends form data objects like $_POST[$name] = $data
174    function set_postform($name, $data)
175    {
176        $this->method = 'POST';
177        $this->postform[$name] = $data;
178    }
179
180    function set_useragent($string)
181    {
182        $this->useragent = $string;
183    }
184
185    function set_header($headerstring)
186    {
187        if (!strpos($headerstring, ':'))
188        {
189            return;
190        }
191        $this->headers[$headerstring] = $headerstring;
192    }
193}
194?>
Note: See TracBrowser for help on using the browser.