]>
Commit | Line | Data |
---|---|---|
ec397236 NL |
1 | <?php |
2 | /** | |
3 | * Humble HTTP Agent extension for SimplePie_File | |
4 | * | |
5 | * This class is designed to extend and override SimplePie_File | |
6 | * in order to prevent duplicate HTTP requests being sent out. | |
7 | * The idea is to initialise an instance of Humble HTTP Agent | |
8 | * and attach it, to a static class variable, of this class. | |
9 | * SimplePie will then automatically initialise this class | |
10 | * | |
11 | * @date 2011-02-28 | |
12 | */ | |
13 | ||
14 | class SimplePie_HumbleHttpAgent extends SimplePie_File | |
15 | { | |
16 | protected static $agent; | |
17 | var $url; | |
18 | var $useragent; | |
19 | var $success = true; | |
20 | var $headers = array(); | |
21 | var $body; | |
22 | var $status_code; | |
23 | var $redirects = 0; | |
24 | var $error; | |
25 | var $method = SIMPLEPIE_FILE_SOURCE_NONE; | |
26 | ||
27 | public static function set_agent(HumbleHttpAgent $agent) { | |
28 | self::$agent = $agent; | |
29 | } | |
30 | ||
31 | public function __construct($url, $timeout = 10, $redirects = 5, $headers = null, $useragent = null, $force_fsockopen = false) { | |
32 | if (class_exists('idna_convert')) | |
33 | { | |
34 | $idn = new idna_convert(); | |
35 | $parsed = SimplePie_Misc::parse_url($url); | |
36 | $url = SimplePie_Misc::compress_parse_url($parsed['scheme'], $idn->encode($parsed['authority']), $parsed['path'], $parsed['query'], $parsed['fragment']); | |
37 | } | |
38 | $this->url = $url; | |
39 | $this->useragent = $useragent; | |
40 | if (preg_match('/^http(s)?:\/\//i', $url)) | |
41 | { | |
42 | if (!is_array($headers)) | |
43 | { | |
44 | $headers = array(); | |
45 | } | |
46 | $this->method = SIMPLEPIE_FILE_SOURCE_REMOTE | SIMPLEPIE_FILE_SOURCE_CURL; | |
47 | $headers2 = array(); | |
48 | foreach ($headers as $key => $value) { | |
49 | $headers2[] = "$key: $value"; | |
50 | } | |
51 | //TODO: allow for HTTP headers | |
52 | // curl_setopt($fp, CURLOPT_HTTPHEADER, $headers2); | |
53 | ||
54 | $response = self::$agent->get($url); | |
55 | ||
56 | if ($response === false || !isset($response['status_code'])) { | |
57 | $this->error = 'failed to fetch URL'; | |
58 | $this->success = false; | |
59 | } else { | |
60 | // The extra lines at the end are there to satisfy SimplePie's HTTP parser. | |
61 | // The class expects a full HTTP message, whereas we're giving it only | |
62 | // headers - the new lines indicate the start of the body. | |
63 | $parser = new SimplePie_HTTP_Parser($response['headers']."\r\n\r\n"); | |
64 | if ($parser->parse()) { | |
65 | $this->headers = $parser->headers; | |
66 | //$this->body = $parser->body; | |
67 | $this->body = $response['body']; | |
68 | $this->status_code = $parser->status_code; | |
69 | } | |
70 | } | |
71 | } | |
72 | else | |
73 | { | |
74 | $this->error = 'invalid URL'; | |
75 | $this->success = false; | |
76 | } | |
77 | } | |
78 | } | |
79 | ?> |