高手帮忙呀,CURL抓取https一直redirects followed,这个页面是怎么加事?

ghostcry 2011-05-08 06:22:07
代码如下:

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);

都能正常显示的呀。
...全文
1616 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
ghostcry 2011-05-14
  • 打赏
  • 举报
回复
楼上的代码结果还是一样的
young5335 2011-05-11
  • 打赏
  • 举报
回复
附上我实验的代码:

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);

young5335 2011-05-11
  • 打赏
  • 举报
回复
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE,
这两句是正确的.
你的代码已经能得到网页了.但问题是这个页面还使用了JS,而PHP的这种抓取不可能执行JS脚本,因此导致了ASP.NET页面的出错提示.不过从抛出的异常来看.这个网站做的实在是:不设防.
PHP的抓取无法抓取这种需要在客户端进行一定处理的页面.正常情况下,你抓取的页面如果客户端脚本未被执行,也可以获取页面HTML的,但问题是这个网站做的实在是太可爱了
要想抓取,除非你调用浏览器,或者IE或者火狐,或者你用.NET做,调用其Webbrowser控件,否则,你只能自己用PHP实现JAVASCRIPT的解析了
ghostcry 2011-05-10
  • 打赏
  • 举报
回复
还请高手帮忙试一下,怎么样才能取到这种高度加密的 https 页面!!!
黄袍披身 2011-05-09
  • 打赏
  • 举报
回复
跳转的地址过多?
ghostcry 2011-05-09
  • 打赏
  • 举报
回复
CURLOPT_SSL ... 相关的很多参数我都试过了,就是不行,我也知道还有可能是CURLOPT_SSL里的设置问题,可是已经在网络上 google 百度了两天了都没有找到能用的资料,所以请高手帮忙了。
kaifadi 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 ghostcry 的回复:]

应该不是这个原因呀,即使我把 CURLOPT_MAXREDIRS 最大允许跳转 设置到100也是提示:Maximum (100) redirects followed。现在我发现一个东西,不知道是不是这个原因:用Firefox看这个页面(https://member.mycard520.com.tw/Login/MemberLogin.aspx?ReturnUrl=%2fDefault.aspx……
[/Quote]
恩,看到了!
HTTPS的协议,需要SSL,而你的代码里:
CURLOPT_SSL_VERIFYHOST => FALSE,
CURLOPT_SSL_VERIFYPEER => FALSE,
都是FALSE。
我想问题应该就是出在这里。对SSL的设置不太清楚。你可以GOOGLE找找资料看看如何设置这种HTTPS协议的。
ghostcry 2011-05-09
  • 打赏
  • 举报
回复
这个不对呀,用浏览器打开是正常的呀
黄袍披身 2011-05-09
  • 打赏
  • 举报
回复
我估计是有某个地址在不停的跳转 例如 类似 ReturnUrl 这样自动跳转到某个地方 然后在那过不去于是不停的自动刷新(获取),结果导致出错.
ghostcry 2011-05-09
  • 打赏
  • 举报
回复
应该不是这个原因呀,即使我把 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)的页面安全信息发现只是“连接已部分加密”,不知是不是这个原因,请高手指点。
kaifadi 2011-05-09
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 phpnewnew 的回复:]

跳转的地址过多?
[/Quote]

+++
同意这种看法!用HTTP分析工具看看到底转了几个地方。
ghostcry 2011-05-09
  • 打赏
  • 举报
回复
神奇,你的结果怎么会和我的不一样,不过这些我也还是不懂呀。怎么才能和浏览器一样?
kaifadi 2011-05-09
  • 打赏
  • 举报
回复
用你的代码去执行访问: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
ghostcry 2011-05-09
  • 打赏
  • 举报
回复
高手出来呀
ghostcry 2011-05-08
  • 打赏
  • 举报
回复
没有人帮忙吗?

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧