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

Revision 57, 4.0 KB (checked in by exi, 14 years ago)

Changed http_request to be able to post form data
Edited default/blue stylesheets to strecht the page height to 100% again with standards compliance mode

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    }
23
24    function get_content()
25    {
26        $this->request();
27        return $this->content;
28    }
29
30    function get_header()
31    {
32        $this->request();
33        return $this->header;
34    }
35
36    function get_sent()
37    {
38        return $this->sent;
39    }
40
41    function get_recv()
42    {
43        return $this->recv;
44    }
45
46    function connect()
47    {
48        if ($this->fp)
49        {
50            return true;
51        }
52
53        $this->fp = fsockopen($this->url["host"], 80, $errno, $errstr, 10);
54        if (!$this->fp)
55        {
56            echo "Error occured with fsockopen: $errstr ($errno)<br>\n";
57            return false;
58        }
59        return true;
60    }
61
62    function request()
63    {
64        if ($this->requested)
65        {
66            return;
67        }
68        $this->connect();
69        $fp = &$this->fp;
70
71        // define a linefeed (carriage return + newline)
72        $lf = "\r\n";
73
74        $request_string = $this->method.' '.$this->url['path'].'?'.$this->url['query'].' HTTP/1.0'.$lf
75                          .'Accept-Language: en'.$lf
76                          .'User-Agent: '.$this->useragent.$lf
77                          .'Host: '.$this->url['host'].$lf
78                          .'Connection: close'.$lf;
79        if ($this->method == 'POST')
80        {
81            $boundary = substr(md5(rand(0,32000)),0,10);
82            $data = '--'.$boundary.$lf;
83
84            foreach ($this->postform as $name => $content_file)
85            {
86                $data .= 'Content-Disposition: form-data; name="'.$name.'"'.$lf.$lf;
87                $data .= $content_file.$lf;
88                $data .= '--'.$boundary.$lf;
89            }
90
91            foreach ($this->postdata as $name => $content_file)
92            {
93                $data .= 'Content-Disposition: form-data; name="'.$name.'"; filename="'.$name.'"'.$lf;
94                $data .= 'Content-Type: text/plain'.$lf.$lf;
95                $data .= $content_file.$lf;
96                $data .= '--'.$boundary.$lf;
97            }
98
99            $request_string .= 'Content-Length: '.strlen($data).$lf;
100            $request_string .= 'Content-Type: multipart/form-data, boundary='.$boundary.$lf;
101        }
102        else
103        {
104            $data = '';
105        }
106        $request_string .= $lf;
107
108        fputs($fp, $request_string.$data);
109        $this->sent = strlen($header)+strlen($data);
110
111        $header = 1;
112        socket_set_timeout($fp, 5);
113        while ($line = fgets($fp, 4096))
114        {
115            if ($header)
116            {
117                $http_header .= $line;
118            }
119            else
120            {
121                $file .= $line;
122            }
123            if ($header && $line == $lf)
124            {
125                $header = 0;
126            }
127        }
128        fclose($fp);
129        $this->header = $http_header;
130        $this->content = $file;
131        $this->recv = strlen($http_header)+strlen($file);
132        $this->requested = true;
133    }
134
135    function url($url)
136    {
137        $this->url = parse_url($url);
138    }
139
140    // this is to send file-data to be accessed with $_FILES[$name]
141    function set_postdata($name, $data)
142    {
143        $this->method = 'POST';
144        $this->postdata[$name] = $data;
145    }
146
147    // this function sends form data objects like $_POST[$name] = $data
148    function set_postform($name, $data)
149    {
150        $this->method = 'POST';
151        $this->postform[$name] = $data;
152    }
153
154    function set_useragent($string)
155    {
156        $this->useragent = $string;
157    }
158}
159?>
Note: See TracBrowser for help on using the browser.