代码如下:function open_https_url($url,$postfields = '',$cookie_file = '',$referer = ''){ 
$curl = curl_init();
$options = array(
CURLOPT_URL => $url, // 地址
CURLOPT_HEADER => 0,
CURLOPT_NOBODY => 0, CURLOPT_PORT => 443, CURLOPT_RETURNTRANSFER => 1,
CURLOPT_FOLLOWLOCATION => 1, // 使用自动跳转 CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE, CURLOPT_REFERER => $referer 
);
if($postfields)
{
$options[CURLOPT_POST] = 1;
$options[CURLOPT_POSTFIELDS] = $postfields;
} if($cookie_file)
{
$options[CURLOPT_COOKIEJAR] = $cookie_file; // 存放Cookie信息的文件名称
$options[CURLOPT_COOKIEFILE] = $cookie_file; // 读取上面所储存的Cookie信息
} curl_setopt_array($curl, $options); 
$result = curl_exec($curl);
$error = curl_error($curl);

curl_close($curl);
// 如果出错
return $error ? $error : $result;
}set_time_limit(0); 
// 设置Cookie文件保存路径及文件名
$cookie_file = dirname(__FILE__)."/cookie_".md5(basename(__FILE__)).".txt";$url = 'https://member.mycard520.com.tw/Login/MemberLogin.aspx?ReturnUrl=%2fDefault.aspx';
$postfields = array();
echo open_https_url($url,$postfields,$cookie_file,'');无论怎么弄都是提示 Maximum (20) redirects followed ,真不知道是怎么回请高手帮忙分析一下这个页面。
把 $url 修改成其它的都没有问题,如:$url = 'https://www.mycard520.com.tw/mycardstore/store.aspx';
echo open_https_url($url);都能正常显示的呀。

解决方案 »

  1.   


    +++
    同意这种看法!用HTTP分析工具看看到底转了几个地方。
      

  2.   

    应该不是这个原因呀,即使我把 CURLOPT_MAXREDIRS 最大允许跳转 设置到100也是提示:Maximum (100) redirects followed。现在我发现一个东西,不知道是不是这个原因:用Firefox看这个页面(https://member.mycard520.com.tw/Login/MemberLogin.aspx?ReturnUrl=%2fDefault.aspx&AspxAutoDetectCookieSupport=1)的页面安全信息发现“连接已加密:强加密(RC4 128位)”,看这个页面(https://www.mycard520.com.tw/mycardstore/store.aspx)的页面安全信息发现只是“连接已部分加密”,不知是不是这个原因,请高手指点。
      

  3.   

    我估计是有某个地址在不停的跳转 例如 类似 ReturnUrl 这样自动跳转到某个地方 然后在那过不去于是不停的自动刷新(获取),结果导致出错. 
      

  4.   

    恩,看到了!
    HTTPS的协议,需要SSL,而你的代码里:
            CURLOPT_SSL_VERIFYHOST => FALSE,
            CURLOPT_SSL_VERIFYPEER => FALSE,
    都是FALSE。
    我想问题应该就是出在这里。对SSL的设置不太清楚。你可以GOOGLE找找资料看看如何设置这种HTTPS协议的。
      

  5.   

    CURLOPT_SSL ... 相关的很多参数我都试过了,就是不行,我也知道还有可能是CURLOPT_SSL里的设置问题,可是已经在网络上 google 百度了两天了都没有找到能用的资料,所以请高手帮忙了。
      

  6.   

    用你的代码去执行访问:https://member.mycard520.com.tw/Login/MemberLogin.aspx?ReturnUrl=%2fDefault.aspx
    这个地址。返回的。NET应用程序错误提示:
     MyCardMemberService.Main.TreeView1_TreeNodeDataBound(Object sender, TreeNodeEventArgs e) in D:\MyCardWork\MyCardWeb\MyCardMemberService\MyCardMemberService\MasterPages\Main.Master.vb:18
       System.Web.UI.WebControls.TreeView.OnTreeNodeDataBound(TreeNodeEventArgs e) +108
       System.Web.UI.WebControls.TreeView.DataBindRecursive(TreeNode node, IHierarchicalEnumerable enumerable, Boolean ignorePopulateOnDemand) +2923
       System.Web.UI.WebControls.TreeView.DataBindNode(TreeNode node) +285
       System.Web.UI.WebControls.TreeView.PerformDataBinding() +120
       System.Web.UI.WebControls.HierarchicalDataBoundControl.PerformSelect() +85
       System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
       System.Web.UI.WebControls.TreeView.DataBind() +4
       System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
       System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22
       System.Web.UI.WebControls.TreeView.OnPreRender(EventArgs e) +36
       System.Web.UI.Control.PreRenderRecursiveInternal() +80
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Control.PreRenderRecursiveInternal() +171
       System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842
      

  7.   

    还请高手帮忙试一下,怎么样才能取到这种高度加密的 https 页面!!!
      

  8.   

      CURLOPT_SSL_VERIFYHOST => FALSE,
      CURLOPT_SSL_VERIFYPEER => FALSE,
    这两句是正确的.
    你的代码已经能得到网页了.但问题是这个页面还使用了JS,而PHP的这种抓取不可能执行JS脚本,因此导致了ASP.NET页面的出错提示.不过从抛出的异常来看.这个网站做的实在是:不设防.
    PHP的抓取无法抓取这种需要在客户端进行一定处理的页面.正常情况下,你抓取的页面如果客户端脚本未被执行,也可以获取页面HTML的,但问题是这个网站做的实在是太可爱了
    要想抓取,除非你调用浏览器,或者IE或者火狐,或者你用.NET做,调用其Webbrowser控件,否则,你只能自己用PHP实现JAVASCRIPT的解析了
      

  9.   

    附上我实验的代码:header('Content-Type:text/html;charset=utf-8');
    $curl=curl_init('https://member.mycard520.com.tw/Login/MemberLogin.aspx?ReturnUrl=%2fDefault.aspx');
    curl_setopt($curl, CURLOPT_AUTOREFERER, 1);
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
    curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
    curl_setopt($curl, CURLOPT_MAXREDIRS, 1000);$html=curl_exec($curl);
    var_dump($html);