<?php
class Isis_Expl
{
const USERAGENT = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.2.13) Gecko/20101203 Firefox/3.6.13';
public static $ch;
public static $proxyType;
public static $proxy;
public static $postFields;
public static $cookie;
public static function setProxy($proxy, $proxyType = '1')
{
self::$proxy = $proxy;
switch ($proxyType)
{
case '4':
self::$proxyType = 'CURLPROXY_SOCKS4';
break;
case '5':
self::$proxyType = 'CURLPROXY_SOCKS5';
break;
default:
break;
}
}
public static function init($url)
{
self::$ch = curl_init();
curl_setopt(self::$ch, CURLOPT_URL, $url);
curl_setopt(self::$ch, CURLOPT_REFERER, $url);
curl_setopt(self::$ch, CURLOPT_HEADER, 1);
curl_setopt(self::$ch, CURLOPT_USERAGENT, self::USERAGENT);
curl_setopt(self::$ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt(self::$ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt(self::$ch, CURLOPT_TIMEOUT, 15);
curl_setopt(self::$ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt(self::$ch, CURLOPT_SSL_VERIFYHOST, FALSE);
self::_getProxy();
self::_getPost();
self::_getCookie();
$content = curl_exec(self::$ch);
if (curl_errno(self::$ch))
{
echo curl_error(self::$ch);
return false;
}
else
{
return $content;
}
}
protected function _getProxy()
{
if (self::$proxyType) curl_setopt(self::$ch, CURLOPT_PROXYTYPE, self::$proxyType);
if (self::$proxy) curl_setopt(self::$ch, CURLOPT_PROXY, self::$proxy);
}
protected function _getPost()
{
if (self::$postFields)
{
curl_setopt(self::$ch, CURLOPT_POST, 1);
curl_setopt(self::$ch, CURLOPT_POSTFIELDS, self::$postFields);
}
}
protected function _getCookie()
{
if (self::$cookie) curl_setopt(self::$ch, CURLOPT_COOKIE, self::$cookie);
}
}
Isis_Expl::setProxy('XXX.XXX.XXX.XXX:XXXX');
echo Isis_Expl::init('http://google.com');
输出:接收失败:重置连接
但如果我评论“//Isis_Expl::setProxy('XXX.XXX.XXX.XXX:XXXX');”输出没问题.. 哪里有问题?
答案 0 :(得分:2)
首先,当实例更合适时,不要使用静态类。你在这里有州,所以使用一个实例。其次,您可能希望更好地命名您的方法。 _getProxy()
我认为会返回一些内容,而不会影响应用的状态。
现在,针对您的确切问题:
是HTTP代理吗?如果是,您应该将CURLOPT_HTTPPROXYTUNNEL
设置为true吗?
您在proxyType
默认声明setProxy
为1,但之后您永远不会设置self::$proxyType
。你永远不会将CURLOPT_PROXYTYPE
设置为CURLPROXY_HTTP
(你不应该,但我会明确)。
您永远不会为代理声明任何身份验证。它是开放代理吗?
您确定代理实际上正在侦听该IP和端口吗?这是一个非标准的端口...尝试从服务器打开一个连接,看看会发生什么:
$f = fsockopen('XXX.XXX.XXX.XXX', 'XXXX');
if (!$f) die('Server not accepting connections');
fwrite($f, "q\r\n\r\n");
var_dump(fread($f, 4048));
fclose($f);