root/dev/common/class.http.php @ 162

Revision 162, 4.9 KB (checked in by exi, 14 years ago)

Added externalids to autoupgrade code.
Added custom headers to the http_class.
Added an option to set the socket timeout when using the http_class.
Pushed version to 1.2.2 in globals.php.
Fixed a bug in the battle parser which prevented it from parsing kills of the last day.
Added code to the synchronization module so it can handle item value updates as well.
Changed killists so they don't list kills as a kill anymore where an corp/alliance member has been killed, right, those are now pure losses. This should also resolve an issue with the battle parser going mad.

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        fclose($fp);
154        $this->header = $http_header;
155        $this->content = $file;
156        $this->recv = strlen($http_header)+strlen($file);
157        $this->requested = true;
158    }
159
160    function url($url)
161    {
162        $this->url = parse_url($url);
163    }
164
165    // this is to send file-data to be accessed with $_FILES[$name]
166    function set_postdata($name, $data)
167    {
168        $this->method = 'POST';
169        $this->postdata[$name] = $data;
170    }
171
172    // this function sends form data objects like $_POST[$name] = $data
173    function set_postform($name, $data)
174    {
175        $this->method = 'POST';
176        $this->postform[$name] = $data;
177    }
178
179    function set_useragent($string)
180    {
181        $this->useragent = $string;
182    }
183
184    function set_header($headerstring)
185    {
186        if (!strpos($headerstring, ':'))
187        {
188            return;
189        }
190        $this->headers[$headerstring] = $headerstring;
191    }
192}
193?>
Note: See TracBrowser for help on using the browser.