123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778 |
- <?php
- function url_getter_init() {
- if (!function_exists('curl_version')) {
- // see, this is why I want a dependency check callback in the core!!
- register_error('The URL Getter depends on CURL, but the library was not found. Please install it.');
- }
- }
- /**
- * $url: the URL to get
- * $args: array of other optional arguments as follows:
- * username: username for HTTP auth
- * password: password for HTTP auth
- * post: boolean, is this a post? (defaults to False)
- * data: HTTP body for POST
- * headers: HTTP headers
- */
- function url_getter_getUrl($url, $args = array()) {
- global $release;
- $userAgent = '(Elgg ' . $release . ')';
- $ch = curl_init();
- curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
- curl_setopt($ch, CURLOPT_URL, $url);
- curl_setopt($ch, CURLOPT_FAILONERROR, true);
- curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
- curl_setopt($ch, CURLOPT_AUTOREFERER, true);
- curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
- curl_setopt($ch, CURLOPT_TIMEOUT, 10);
- curl_setopt($ch, CURLOPT_VERBOSE, 1);
- if ($args['username'] && $args['password']) {
- curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
- curl_setopt($ch, CURLOPT_USERPWD, $args['username'] . ':' . $args['password']);
- }
- if ($args['post']) {
- curl_setopt($ch, CURLOPT_POST, 1);
- curl_setopt($ch, CURLOPT_POSTFIELDS, $args['data']);
- }
- if ($args['headers']) {
- curl_setopt($ch, CURLOPT_HTTPHEADER, $args['headers']);
- }
- $html = curl_exec($ch);
- $rc = curl_getinfo($ch, CURLINFO_HTTP_CODE);
- //print '[' . $url . ':' . $html . ':' . $rc . ']' . "\n";
- if (!$html && $rc != 200) {
- return $rc;
- } else {
- return $html;
- }
- }
- /**
- * Fetch a URL and parse it as an XML document.
- * Same arguments as getUrl
- */
- function url_getter_getDoc($url, $args = array()) {
- $doc = new DOMDocument();
- $xml = url_getter_getUrl($url, $args);
- if ($xml && is_string($xml)) {
- $xml = trim($xml); // trim out newlines and other whitespace that might confuse the parser
- $doc->loadXML($xml);
- }
- return $doc;
- }
- elgg_register_event_handler('init','system','url_getter_init');
|