Proxy support in SimplePie RSS parser
parent
3b73803ab8
commit
e057cd47ae
|
@ -7676,6 +7676,55 @@ class SimplePie_File
|
|||
{
|
||||
curl_setopt($fp, CURLOPT_ENCODING, '');
|
||||
}
|
||||
// added by FoF (vitalif@yourcmc.ru) to enable environment proxy settings support
|
||||
// fucking cURL doesn't support this by default
|
||||
if ($proxy = getenv("http_proxy"))
|
||||
{
|
||||
$useproxy = true;
|
||||
if ($noproxy = preg_split("#\s*,\s*#is", getenv("no_proxy")))
|
||||
{
|
||||
foreach ($noproxy as $n)
|
||||
{
|
||||
if (preg_match('#(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)#s', $n, $m) &&
|
||||
preg_match('#^[a-z0-9_]+://([^/]+)#is', $url, $ip))
|
||||
{
|
||||
$mask = array(
|
||||
max(0x100 - (1 << max( 8-$m[5], 0)), 0),
|
||||
max(0x100 - (1 << max(16-$m[5], 0)), 0),
|
||||
max(0x100 - (1 << max(24-$m[5], 0)), 0),
|
||||
max(0x100 - (1 << max(32-$m[5], 0)), 0),
|
||||
);
|
||||
$ip = @gethostbyname($ip[1]);
|
||||
if (preg_match('#(\d+)\.(\d+)\.(\d+)\.(\d+)#s', $ip, $ipm) &&
|
||||
(intval($ipm[1]) & $mask[0]) == intval($m[1]) &&
|
||||
(intval($ipm[2]) & $mask[1]) == intval($m[2]) &&
|
||||
(intval($ipm[3]) & $mask[2]) == intval($m[3]) &&
|
||||
(intval($ipm[4]) & $mask[3]) == intval($m[4]))
|
||||
{
|
||||
$useproxy = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
$n = preg_replace('/#.*$/is', '', $n);
|
||||
$n = preg_quote($n);
|
||||
$n = str_replace('\\*', '.*', $n);
|
||||
if (preg_match('#'.$n.'#is', $url))
|
||||
{
|
||||
$useproxy = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
if ($useproxy)
|
||||
{
|
||||
$proxy = preg_replace('#^http://#is', '', $proxy);
|
||||
$proxy = preg_replace('#/*$#is', '', $proxy);
|
||||
curl_setopt($fp, CURLOPT_PROXY, $proxy);
|
||||
}
|
||||
}
|
||||
curl_setopt($fp, CURLOPT_URL, $url);
|
||||
curl_setopt($fp, CURLOPT_HEADER, 1);
|
||||
curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
|
||||
|
|
|
@ -1,15 +1,71 @@
|
|||
Index: simplepie.inc
|
||||
===================================================================
|
||||
--- simplepie.inc (revision 810)
|
||||
+++ simplepie.inc (working copy)
|
||||
@@ -6495,6 +6495,10 @@
|
||||
curl_setopt($fp, CURLOPT_FOLLOWLOCATION, 1);
|
||||
--- simplepie.inc 2009-07-11 12:50:28.000000000 +0400
|
||||
+++ simplepie.inc 2009-08-03 17:43:29.783542354 +0400
|
||||
@@ -7676,6 +7676,55 @@ class SimplePie_File
|
||||
{
|
||||
curl_setopt($fp, CURLOPT_ENCODING, '');
|
||||
}
|
||||
+ // added by FoF (vitalif@yourcmc.ru) to enable environment proxy settings support
|
||||
+ // fucking cURL doesn't support this by default
|
||||
+ if ($proxy = getenv("http_proxy"))
|
||||
+ {
|
||||
+ $useproxy = true;
|
||||
+ if ($noproxy = preg_split("#\s*,\s*#is", getenv("no_proxy")))
|
||||
+ {
|
||||
+ foreach ($noproxy as $n)
|
||||
+ {
|
||||
+ if (preg_match('#(\d+)\.(\d+)\.(\d+)\.(\d+)/(\d+)#s', $n, $m) &&
|
||||
+ preg_match('#^[a-z0-9_]+://([^/]+)#is', $url, $ip))
|
||||
+ {
|
||||
+ $mask = array(
|
||||
+ max(0x100 - (1 << max( 8-$m[5], 0)), 0),
|
||||
+ max(0x100 - (1 << max(16-$m[5], 0)), 0),
|
||||
+ max(0x100 - (1 << max(24-$m[5], 0)), 0),
|
||||
+ max(0x100 - (1 << max(32-$m[5], 0)), 0),
|
||||
+ );
|
||||
+ $ip = @gethostbyname($ip[1]);
|
||||
+ if (preg_match('#(\d+)\.(\d+)\.(\d+)\.(\d+)#s', $ip, $ipm) &&
|
||||
+ (intval($ipm[1]) & $mask[0]) == intval($m[1]) &&
|
||||
+ (intval($ipm[2]) & $mask[1]) == intval($m[2]) &&
|
||||
+ (intval($ipm[3]) & $mask[2]) == intval($m[3]) &&
|
||||
+ (intval($ipm[4]) & $mask[3]) == intval($m[4]))
|
||||
+ {
|
||||
+ $useproxy = false;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ else
|
||||
+ {
|
||||
+ $n = preg_replace('/#.*$/is', '', $n);
|
||||
+ $n = preg_quote($n);
|
||||
+ $n = str_replace('\\*', '.*', $n);
|
||||
+ if (preg_match('#'.$n.'#is', $url))
|
||||
+ {
|
||||
+ $useproxy = false;
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ }
|
||||
+ if ($useproxy)
|
||||
+ {
|
||||
+ $proxy = preg_replace('#^http://#is', '', $proxy);
|
||||
+ $proxy = preg_replace('#/*$#is', '', $proxy);
|
||||
+ curl_setopt($fp, CURLOPT_PROXY, $proxy);
|
||||
+ }
|
||||
+ }
|
||||
curl_setopt($fp, CURLOPT_URL, $url);
|
||||
curl_setopt($fp, CURLOPT_HEADER, 1);
|
||||
curl_setopt($fp, CURLOPT_RETURNTRANSFER, 1);
|
||||
@@ -7690,6 +7739,10 @@ class SimplePie_File
|
||||
curl_setopt($fp, CURLOPT_MAXREDIRS, $redirects);
|
||||
}
|
||||
+
|
||||
|
||||
+ // added by FoF to enable https and digest authentication
|
||||
+ curl_setopt($fp, CURLOPT_SSL_VERIFYPEER, false);
|
||||
+ curl_setopt($fp, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
|
||||
|
||||
+
|
||||
$this->headers = curl_exec($fp);
|
||||
if (curl_errno($fp) == 23 || curl_errno($fp) == 61)
|
||||
if (curl_errno($fp) === 23 || curl_errno($fp) === 61)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue