代码之家  ›  专栏  ›  技术社区  ›  donohoe

使用Curl登录时出现问题纽约时报网

  •  1
  • donohoe  · 技术社区  · 15 年前

    结果证明我的代码有效。浏览器正在缓存以前失败的响应。谢谢你的指点。

    使用curl,我尝试登录站点,然后检查成功或失败。

    下面的代码不会返回错误,但会将我放回登录页:

    <?php
    class Login {
    
        function Verify() {
            print $this->getContent();
        }
    
        function getContent() {
    
            $url    = 'http://www.nytimes.com/auth/login';
    
            // URI can be any NYT web page to be redirected to upon successful login
            // SAVEOPTION and Submit2 are Optional but in original web form so included here
    
            $fields = array(
                'is_continue'=> 'true',
                'USERID'     => urlencode('ENTER_YOUR_USERNAME'),
                'PASSWORD'   => urlencode('ENTER_A_PASSWORD'),
                'URI'        => urlencode('http://www.nytimes.com/robots.txt'), 
                'OQ'         => '',
                'OP'         => '',
                'SAVEOPTION' => 'YES',
                'Submit2'    => 'Log In'
            );
    
            $fields_string = '';
    
            if(!$curld = curl_init($url)) {
                echo "Could not connect to the specified resource";
                   exit;
            }
            $ch        = curl_init();
            $useragent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.1) Gecko/20061204 Firefox/2.0.0.1";
    
            foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; } 
            rtrim($fields_string,'&');
    
            curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
            curl_setopt($ch, CURLOPT_HEADER, 0);
            curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_COOKIEJAR, "curl_login_cookie.txt");
    
            curl_setopt($ch ,CURLOPT_POST, count($fields));
            curl_setopt($ch, CURLOPT_POSTFIELDS, $fields_string);
    
            ob_start();
            curl_exec ($ch);
    
            curl_close ($ch);
            $result = ob_get_contents();
            ob_end_clean();
    
            return $result;
        }
    }
    
    $login  = new Login;
    $result = $login->Verify();
    ?>
    

    1 回复  |  直到 15 年前
        1
  •  1
  •   Daniel Vandersluis    15 年前

    你需要检查一下 curl_exec

    如果成功了,试着检查 curl_errno curl_getinfo 查看有关操作的信息。

    另外,设置 CURLOPT_RETURNTRANSFER 选项,而不是使用输出缓冲来捕获结果。

    推荐文章