CURL 获取数据:object moved

/ 0评 / 9

在使用file_get_contents获取数据时遭遇302重定向,从而获取不了。转而使用curl,curl却报错:object moved 

gg搜索下。把原先的:

$ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'http://www.domain.com/today/today.asp');

    culr_setopt($ch,CURLOPT_HEADER,0);

    $string = curl_exec($ch);

改为

    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,'http://www.domain.com/today/today.asp');
    curl_setopt($ch, CURLOPT_URL,$url);
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $postArray);
    $string = curl_exec($ch);

这样便能正常显示了。但是上传到centos服务器上却不行了。服务器防火墙是允许访问该网站的。最终原因不明。

 

又找到如下函数,可以返回重定向的url

function _curl_post_302($url, $vars) {
        $ch = curl_init();
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // 302 redirect
        curl_setopt($ch, CURLOPT_POSTFIELDS, $vars);
        $data = curl_exec($ch);
        $Headers = curl_getinfo($ch);
        curl_close($ch);
        if ($data&&$Headers)
        return $Headers["url"];
        else
        return false;
}

$url = _curl_post_302('http://www.domain.com/today/today.asp',$arr);           //返回的则是重定向url

然后可以使用file_get_contents()抓取这个新的地址数据了。这样就得到了。

 

发表评论

您的电子邮箱地址不会被公开。

*