登录网站cURL

时间:2010-04-14 15:41:54

标签: php curl

我第一次使用cURL。我需要登录一个网站。 我有设置cookie文件和回溯的问题,所以我可以访问该页面不只是一次,而是几次。 我在网上找到了代码,用于登录网站和Scrap页面获取一些详细信息,导致获取该页面需要很长时间。 所以我只想知道它是否正常!代码belove(它只是用于在Scraping中未登录的代码中登录)

<?php

curl_login('http://mywantedsite.com/login.php','user=******&pass=******','','off');

echo curl_grab_page('http://mywantedsite.com/somepage.php','','off');

function curl_login($url,$data,$proxy,$proxystatus){
    $fp = fopen("cookie.txt", "w");
    fclose($fp);
    $login = curl_init();
    curl_setopt($login, CURLOPT_COOKIEJAR, "cookie.txt");
    curl_setopt($login, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($login, CURLOPT_USERAGENT, "Mozilla/4.0 (compatible; MSIE 5.01; Windows NT 5.0)");
    curl_setopt($login, CURLOPT_TIMEOUT, 40);
    curl_setopt($login, CURLOPT_RETURNTRANSFER, TRUE);
    if ($proxystatus == 'on') {
        curl_setopt($login, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($login, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($login, CURLOPT_PROXY, $proxy);
    }
    curl_setopt($login, CURLOPT_URL, $url);
    curl_setopt($login, CURLOPT_HEADER, TRUE);
    curl_setopt($login, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);
    curl_setopt($login, CURLOPT_FOLLOWLOCATION, TRUE);
    curl_setopt($login, CURLOPT_POST, TRUE);
    curl_setopt($login, CURLOPT_POSTFIELDS, $data);
    ob_start();      // prevent any output
    return curl_exec ($login); // execute the curl command
    ob_end_clean();  // stop preventing output
    curl_close ($login);
    unset($login);    
}                  

function curl_grab_page($site,$proxy,$proxystatus){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($proxystatus == 'on') {
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();      // prevent any output
    return curl_exec ($ch); // execute the curl command
    ob_end_clean();  // stop preventing output
    curl_close ($ch);
}  
?>

3 个答案:

答案 0 :(得分:2)

您需要检查是否要发布所有“发布字段”.. 某些站点使用安全令牌或会话ID来防止僵尸程序登录其站点。 无论如何,您需要安装Live HTTP标头firefox扩展。打开它并尝试手动登录,然后查看当您按下登录按钮时实际发布的内容。 获得价值后。然后添加到第一个函数并再次测试。

答案 1 :(得分:1)

首先使用$strPostFields存储登录名和密码,然后使用

$this->m_strResourceCurl = curl_init();

并在您的cURL脚本中添加此

curl_setopt( $this->m_strResourceCurl, CURLOPT_POSTFIELDS, $strPostFields );

我希望你能得到这个小代码片段。

答案 2 :(得分:0)

为什么不在

添加网址参数
$login = curl_init($url);