通过代理的一般方法
<?php
//配置代理服务器
$proxy_host="proxyhost";
$proxy_port="port";
//配置欲打开的网页
$url="http://bbs.yzvod.com/index.asp";//注意要加"http://"//对路径的处理,如果前面没有/,就加一个
function slashUrl($url) {
if(!ereg("^/",$url)) {
return "/".$url;
}else {
return $url;
}
}
//对获得内容进行处理,去掉头部信息
function trimHeader($content){
$array=split("\n\r",$content,"2");
return trim($array["1"]);
} function http_fopen($host,$port="80"){
global $proxy_host;
global $proxy_port;
if(empty($proxy_host)){
$conn_host=$host;
$conn_port=$port;
} else{
$conn_host=$proxy_host;
$conn_port=$proxy_port;
}
$path=slashurl($path);
$abs_url=$host;
//$abs_url="http://".$host.":".$port.$path;
$query="GET $abs_url HTTP/1.0\r\n".
//"HOST:$host:$port\r\n".
"User-agent:PHP/class http 0.1\r\n".
"\r\n";
$fp=fsockopen($conn_host,$conn_port);
if(!$fp){
return false;
}else{
fputs($fp,$query);
while(!feof($fp)) {
$cc.=fgets($fp);
}
fclose($fp);
$content=trimHeader($cc);
return $content;
}
} //前面是主机地址,第二个参数是具体的目标
$http=http_fopen($url);if(!$http){
echo"对不起,连接代理服务器出错!";
exit;
}else{
echo $http;
}
?>由于我的代理不需要验证,所以无法告知如何设置用户名和密码
但你可通过查看socket会话来找到何时应发出用户名和密码
下面是一个用socket发邮件的类的片段,他是这样发送验证信息的:
//以下是和服务器会话
$this->in = "EHLO HELO\r\n";
$this->docommand(); // 是否需要验证
if($this->auth)
{
$this->in = "AUTH LOGIN\r\n";
$this->docommand(); $this->in = $this->user."\r\n";
$this->docommand(); $this->in = $this->pass."\r\n";
$this->docommand();
}
<?php
//配置代理服务器
$proxy_host="proxyhost";
$proxy_port="port";
//配置欲打开的网页
$url="http://bbs.yzvod.com/index.asp";//注意要加"http://"//对路径的处理,如果前面没有/,就加一个
function slashUrl($url) {
if(!ereg("^/",$url)) {
return "/".$url;
}else {
return $url;
}
}
//对获得内容进行处理,去掉头部信息
function trimHeader($content){
$array=split("\n\r",$content,"2");
return trim($array["1"]);
} function http_fopen($host,$port="80"){
global $proxy_host;
global $proxy_port;
if(empty($proxy_host)){
$conn_host=$host;
$conn_port=$port;
} else{
$conn_host=$proxy_host;
$conn_port=$proxy_port;
}
$path=slashurl($path);
$abs_url=$host;
//$abs_url="http://".$host.":".$port.$path;
$query="GET $abs_url HTTP/1.0\r\n".
//"HOST:$host:$port\r\n".
"User-agent:PHP/class http 0.1\r\n".
"\r\n";
$fp=fsockopen($conn_host,$conn_port);
if(!$fp){
return false;
}else{
fputs($fp,$query);
while(!feof($fp)) {
$cc.=fgets($fp);
}
fclose($fp);
$content=trimHeader($cc);
return $content;
}
} //前面是主机地址,第二个参数是具体的目标
$http=http_fopen($url);if(!$http){
echo"对不起,连接代理服务器出错!";
exit;
}else{
echo $http;
}
?>由于我的代理不需要验证,所以无法告知如何设置用户名和密码
但你可通过查看socket会话来找到何时应发出用户名和密码
下面是一个用socket发邮件的类的片段,他是这样发送验证信息的:
//以下是和服务器会话
$this->in = "EHLO HELO\r\n";
$this->docommand(); // 是否需要验证
if($this->auth)
{
$this->in = "AUTH LOGIN\r\n";
$this->docommand(); $this->in = $this->user."\r\n";
$this->docommand(); $this->in = $this->pass."\r\n";
$this->docommand();
}
$cc.=fgets($fp);
}中发生死循环了我只把最上面的三个配置项改掉了,还需要改别的地方吗?
还有身份验证那部分怎么加进来?