// check if proxy (if used) should be bypassed for this url
$proxybypass = is_proxybypass( $url );
- if (!extension_loaded('curl') or ($ch = curl_init($url)) === false) {
- require_once($CFG->libdir.'/snoopy/Snoopy.class.inc');
- $snoopy = new Snoopy();
- $snoopy->read_timeout = $timeout;
- $snoopy->_fp_timeout = $connecttimeout;
- if (!$proxybypass) {
- $snoopy->proxy_host = $CFG->proxyhost;
- $snoopy->proxy_port = $CFG->proxyport;
- if (!empty($CFG->proxyuser) and !empty($CFG->proxypassword)) {
- // this will probably fail, but let's try it anyway
- $snoopy->proxy_user = $CFG->proxyuser;
- $snoopy->proxy_password = $CFG->proxypassword;
- }
- }
-
- if (is_array($headers) ) {
- $client->rawheaders = $headers;
- }
-
- if (is_array($postdata)) {
- $fetch = @$snoopy->fetch($url, $postdata); // use more specific debug code bellow
- } else {
- $fetch = @$snoopy->fetch($url); // use more specific debug code bellow
- }
-
- if ($fetch) {
- if ($fullresponse) {
- //fix header line endings
- foreach ($snoopy->headers as $key=>$unused) {
- $snoopy->headers[$key] = trim($snoopy->headers[$key]);
- }
- $response = new object();
- $response->status = $snoopy->status;
- $response->headers = $snoopy->headers;
- $response->response_code = trim($snoopy->response_code);
- $response->results = $snoopy->results;
- $response->error = $snoopy->error;
- return $response;
-
- } else if ($snoopy->status != 200) {
- debugging("Snoopy request for \"$url\" failed, http response code: ".$snoopy->response_code, DEBUG_ALL);
- return false;
-
- } else {
- return $snoopy->results;
- }
- } else {
- if ($fullresponse) {
- $response = new object();
- $response->status = $snoopy->status;
- $response->headers = array();
- $response->response_code = $snoopy->response_code;
- $response->results = '';
- $response->error = $snoopy->error;
- return $response;
- } else {
- debugging("Snoopy request for \"$url\" failed with: ".$snoopy->error, DEBUG_ALL);
- return false;
- }
- }
- }
-
// set extra headers
if (is_array($headers) ) {
$headers2 = array();
return $info;
}
-function resource_fetch_remote_file ($cm, $url, $headers = "" ) {
-/// Snoopy is an HTTP client in PHP
-
- global $CFG;
-
- require_once("$CFG->libdir/snoopy/Snoopy.class.inc");
-
- $client = new Snoopy();
- $ua = 'Moodle/'. $CFG->release . ' (+http://moodle.org';
- if ( $CFG->resource_usecache ) {
- $ua = $ua . ')';
- } else {
- $ua = $ua . '; No cache)';
- }
- $client->agent = $ua;
- $client->read_timeout = 5;
- $client->use_gzip = true;
- if (is_array($headers) ) {
- $client->rawheaders = $headers;
- }
-
- @$client->fetch($url);
- if ( $client->status >= 200 && $client->status < 300 ) {
- $tags = array("A" => "href=",
- "IMG" => "src=",
- "LINK" => "href=",
- "AREA" => "href=",
- "FRAME" => "src=",
- "IFRAME" => "src=",
- "FORM" => "action=");
-
- foreach ($tags as $tag => $key) {
- $prefix = "fetch.php?id=$cm->id&url=";
- if ( $tag == "IMG" or $tag == "LINK" or $tag == "FORM") {
- $prefix = "";
- }
- $client->results = resource_redirect_tags($client->results, $url, $tag, $key,$prefix);
- }
- } else {
- if ( $client->status >= 400 && $client->status < 500) {
- $client->results = get_string("fetchclienterror","resource"); // Client error
- } elseif ( $client->status >= 500 && $client->status < 600) {
- $client->results = get_string("fetchservererror","resource"); // Server error
- } else {
- $client->results = get_string("fetcherror","resource"); // Redirection? HEAD? Unknown error.
- }
- }
- return $client;
-}
-
function resource_redirect_tags($text, $url, $tagtoparse, $keytoparse,$prefix = "" ) {
$valid = 1;
if ( strpos($url,"?") == FALSE ) {