2010-04-14 204 views
3

我第一次使用cURL。我需要登录到一个网站。 我有问题与设置Cookie文件并回顾,以便我可以访问该页面不只是一次,但几次。 我在网上找到了代码,用于登录到一个网站,并废弃一些页面的详细信息,导致该页面花费很多时间。 所以我只想知道它是否可以!代码belove(它只是一个登录的代码,刮坏了没准备好)登录网站cURL

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

回答

0

你为什么不以

$login = curl_init($url); 
+0

'CURLOPT_URL'就好了。但不要使用ob,而是让curl返回输出本身并用'$ output = curl_exec($ login);' – 2010-04-27 10:52:14

2

你需要检查添加URL参数,如果你要留言所有“发布字段”.. 一些网站使用安全令牌或会话ID来防止漫游器登录其网站。无论如何,你需要安装Live HTTP头文件firefox扩展。打开它并尝试手动登录,然后在按下登录按钮时看到实际发布的内容。获取值后,获取 。然后添加到第一个函数并再次测试。

1

首先使用$strPostFields存储的用户名和密码,然后使用

$this->m_strResourceCurl = curl_init(); 

,并在您的卷曲脚本添加此

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

我希望你这个小代码段。