运行下面的程序会出现“500内部服务器错误”,或者提示“您的页面闲置太久”,是不是curl_setopt里的参数哪没设置好?<?php
/**
 * 获得139邮箱通讯录列表 -- contactstom.class.php
 */
define( "COOKIEJAR", tempnam( ini_get( "upload_tmp_dir" ), "cookie" ) );   //定义COOKIES存放的路径,要有操作的权限
define( "TIMEOUT", 1000 ); //超时设定class contacts139
{ function checklogin( $user, $password )
{
$ch = curl_init( );
$headers_login = array(
                     'Host'  => 'mail.10086.cn',
                     'User-Agent'      => 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; MS-RTC LM 8; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; CIBA)',
                     'Accept'          => 'image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/msword, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/x-ms-application, application/x-ms-xbap, application/vnd.ms-xpsdocument, application/xaml+xml, */*',
                     'Accept_Language' => 'zh-cn',
                     'Accept_Encoding' => 'gzip,deflate',
//                      'Accept_Charset'  => 'GB2312,utf-8;q=0.7,*;q=0.7\r\n',
//                      'Keep-Alive'      => '115',
                     'Connection'      => 'keep-alive',
                     'Content-Length'      => '50',
                     'Content-Type'      => 'application/x-www-form-urlencoded',
//                      'X-Requested-With'=> 'XMLHttpRequest',
                     'Content_Type'    => 'application/x-www-form-urlencoded',
                     'Cache-Control'    => 'no-cache',
                     'Referer'         => 'http://mail.10086.cn/'
                 );
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers_login);  
curl_setopt($ch,CURLOPT_HEADER,1);
curl_setopt( $ch, CURLOPT_URL, "https://mail.10086.cn/Login/Login.ashx" );
// curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
curl_setopt( $ch, CURLOPT_POST, 1 );
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt( $ch, CURLOPT_COOKIEJAR, COOKIEJAR );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
$fileds = "UserName=".$user."&Password={$password}";
$fileds .= "&VerifyCode";
curl_setopt( $ch, CURLOPT_POSTFIELDS, $fileds );
ob_start( );
curl_exec( $ch );
$str = curl_exec($ch);
echo $str;exit;
$result = ob_get_contents( );
ob_end_clean( );
curl_close( $ch );
/*if ( preg_match( "/warning|?��??/", $result ) )
{
return 0;
}*/
return 1;
} function getcontacts( $user, $password, &$result )
{
if ( !$this->checklogin( $user, $password ) )
{
return 'checklogin失败';
}
$this->readcookies( COOKIEJAR, $res );
print_r($res);exit;
if ( $res['Coremail'] == "" )
{
return 'readcookies失败';
}
$sid = substr( trim( $res['Coremail'] ), -16 );
$url = "http://wmail1.mail.10086.cn/c/XTS/default.jsp";
$url .= "?funcid=main&sid=".$sid;
$ch = curl_init( );
curl_setopt( $ch, CURLOPT_URL, $url );
curl_setopt( $ch, CURLOPT_USERAGENT, USERAGENT );
curl_setopt( $ch, CURLOPT_TIMEOUT, TIMEOUT );
curl_setopt( $ch, CURLOPT_COOKIEFILE, COOKIEJAR );
ob_start( );
curl_exec( $ch );
$res = ob_get_contents( ); ob_end_clean( );
curl_close( $ch );
$res = iconv("gb2312","utf-8",$res); $p="/<td\sclass=\"Addr_Td_Name\"><a href=\"(.+)?\">(.+)?<\/a><\/td><td\sclass=\"Addr_Td_Address\"><a\shref=\"(.+)?\">(.+)?<\/a>/";
preg_match_all( $p, $res, $tmp);
$result[0]=$tmp[2]; $pattern = "/([\\w_-])+@([\\w])+([\\w.]+)/";
if ( preg_match_all( $pattern, $res, $tmpres, PREG_PATTERN_ORDER ) )
{
$result[1] = array_unique( $tmpres[0] );
}
return $result;
} function readcookies( $file, &$result )
{
$fp = fopen( $file, "r" );
while ( !feof( $fp ) )
{
$buffer = fgets( $fp, 4096 );
$tmp = split( "\t", $buffer );
$result[trim( $tmp[5] )] = trim( $tmp[6] );
}
return 1;
}}$contacts = new contacts139;$res = $contacts->getcontacts('手机号','密码',$result);print_r($res);?>

解决方案 »

  1.   

    自己顶一下,别沉了,等待ing
      

  2.   

    看楼主每个邮箱都在进啊
    肯定每个服务商的编码方式不一样 但你模拟web页面登陆的话 怎么都要保证session不被终止啊
    建议在浏览器里登陆的同时 用Microsoft Network Monitor之类的监视下数据包 看看正规的登录时怎样的
      

  3.   

    用httpwatch监视了,也是模拟的监视到的值,可是问题还是存在,应该是哪个环节有问题,求指正
      

  4.   

    抱歉,现在在下sdk 做不了监视。。而且让我去编码不会写的比你好
    但我想它有时报500有时候报登陆错误,也就是说500时很有可能你已经登陆成功了,是在采集通讯录上编码出错了吧
      

  5.   

    我是在登录后直接echo刚刚登录的内容时就报错了