使用cookies的PHP Curl 302身份验证

使用cookies的PHP Curl 302身份验证,php,curl,http-status-code-302,Php,Curl,Http Status Code 302,我正在尝试学习使用PHP curl,在我尝试向changeip.com进行身份验证之前,它似乎进展顺利。下面是我用来进行Curl调用的函数: function request($ch, $url, $params = array()) { $options = array ( CURLOPT_URL => $url, CURLOPT_USERAGENT =>

我正在尝试学习使用PHP curl,在我尝试向changeip.com进行身份验证之前,它似乎进展顺利。下面是我用来进行Curl调用的函数:

function request($ch, $url, $params = array())
{   
    $options            = array
    (
        CURLOPT_URL                 => $url,
        CURLOPT_USERAGENT           => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X 10.6; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8',
        //CURLOPT_COOKIESESSION     => TRUE,
        CURLOPT_FOLLOWLOCATION      => TRUE,
        CURLOPT_HEADER              => TRUE,
        CURLOPT_RETURNTRANSFER      => TRUE,
        CURLOPT_SSL_VERIFYPEER      => FALSE,
        CURLOPT_SSL_VERIFYPEER      => FALSE,
        CURLINFO_HEADER_OUT         => TRUE,
        CURLOPT_CONNECTTIMEOUT      => 30,
        CURLOPT_TIMEOUT             => 30,
        CURLOPT_MAXREDIRS           => 30,
        CURLOPT_VERBOSE             => TRUE,
        CURLOPT_COOKIEJAR           => __DIR__ . DIRECTORY_SEPARATOR . 'cookies.txt',
        CURLOPT_COOKIEFILE          => __DIR__ . DIRECTORY_SEPARATOR . 'cookies.txt',
        CURLOPT_HTTPHEADER          => array
        (
            'Host: www.changeip.com',
            'Pragma:',
            'Expect:',
            'Keep-alive: 115',
            'Connection: keep-alive',
            'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
            'Accept-Language: en-us,en;q=0.5',
            //'Accept-Encoding: gzip,deflate',
            'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7',
            'Content-Type: application/x-www-form-urlencoded',
        ),
    );

    if(!empty($params['referrer']))
    {
        $options[CURLOPT_REFERER]       = $params['referrer'];
    }

    if(!empty($params['post']))
    {
        $options[CURLOPT_POST]          = TRUE;
        $options[CURLOPT_POSTFIELDS]    = $params['post'];
    }

    curl_setopt_array($ch, $options);

    $return             = array();  
    $return['body']     = curl_exec($ch);
    $info               = curl_getinfo($ch);
    //die(var_dump( curl_getinfo($ch, CURLINFO_HEADER_OUT) ));
    $return['header']   = http_parse_headers(substr($return['body'], 0, $info['header_size']));
    $return['body']     = substr($return['body'], $info['header_size']);

    /*if(!empty($return['header']['Location']))
    {
        $params['referrer'] = $url;
        return request($ch, substr($url, 0, strrpos($url, '/')+1) . $return['header']['Location'], $params);
    }*/

    return $return;
}
以下是实际通话:

// chaneip
$ch                 = curl_init();

// login
$params             = array();
$params['post']     = array
(
    'p' => 'aaaaaa2',
    'u' => 'aaaaaa2',
);

$params['referrer'] = 'https://www.changeip.com/login.asp';

$return             = request($ch, 'https://www.changeip.com/loginverify.asp?', $params);
但是,此脚本不会从changeip.com检索有效的cookie,即不进行身份验证。我曾尝试将Curl发送的头与HTTPLiveHeaders进行比较,希望找到任何不同之处,但最终我什么也没找到。有人能告诉我做这件事缺少什么吗

常见问题: cookie.txt是0777吗?是的,脚本确实创建了某种cookie: www.changeip.com FALSE/FALSE 0 ACloginAddrs 6 www.changeip.com FALSE/FALSE 0 ASPSESSIONIDCCSSCQRA DNHKGDICMKHFIJADMAPPMHHC

但它不是一个有效的cookie

$options[CURLOPT_POSTFIELDS]    = http_build_query($params['post']);
修正了这个问题