2012-03-05 45 views
0

我已经登录到一个网站使用URL,用户名和密码使用curl.The主要问题是,我想获得响应回来,并将其存储在PHP脚本,该网站已登录或不是?使用curl存储登录的响应?

在PHP脚本中存储响应即登录或登录失败是主要问题?我已经给出了下面的脚本可以告诉我要添加什么?

预先感谢

<?php 

$cookiefile = tempnam("/tmp", "cookies"); 

$login_url='**********'; 


$login_post_url='*********'; 


$username = "*****"; 
$password = "*****"; 

$agent="Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 "; 


$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$login_url); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 
$result = curl_exec ($ch); 


curl_close ($ch); 



$postfields = array(
     'j_username' => $username, 
     'j_password' => $password, 
    ); 

$reffer = $login_url; 
$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL,$login_post_url); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, 
     http_build_query($postfields)); 

curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

curl_setopt($ch, CURLOPT_REFERER, $reffer); 


curl_setopt($ch, CURLOPT_COOKIEFILE, $cookiefile); 
curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiefile); 


curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); 

$result = curl_exec ($ch); 
echo $result; 

curl_close ($ch); 


unlink($cookiefile); 
?> 
+0

'[...]是主要问题?'不知道,是吗? – 2012-03-05 10:14:12

回答

1

只是strpos(...)preg_match(...)检查是否有一定的图案/串是在响应(保存在curl_exec($ch))。

之后,只需保存您正在使用的cookie的名称,并且当您再次运行此脚本时,不需要再次登录。

假设文本(响应的一部分)是Login successful,那么你可以告诉:

$login_successful = strpos($response, "Login successful") !== FALSE; 

,或者如果你不关心大小写

$login_successful = strpos(strtolower($response), "login successful") !== FALSE; 

希望帮助!

+0

我已经添加了脚本,你能告诉我该怎么做吗? – kanwarpal 2012-03-05 11:42:52

+0

这是一个相当开放的问题。我不知道你想达到什么目的。请提供更多信息(你有什么代码,你想达到什么目的),所以我/我们可以帮助你。 – Stefan 2012-03-05 11:54:07

+0

Stefan N,我已经添加了上面的代码。其实我想登录到我所做的网站,但我想将响应存储在变量中,当它能够分别登录或不登录时成功或失败。 – kanwarpal 2012-03-05 11:58:53

0

如果您引用HTTP/401授权并通过curl(而不是POST到表单)登录,那么如果失败,您将再次获取HTTP/401,如果成功,您将再次获取HTTP/401。

如果“curl”是由PHP脚本驱动的,我建议你直接在PHP内部使用例如pear的HTTP_Request发起HTTP请求。

+0

我已经添加了脚本,可以告诉我该怎么做? – kanwarpal 2012-03-05 11:43:11

1

存储响应即登录失败或登录失败的PHP脚本是主要问题?

这应该以成功的布尔值以及伴随的HTTP代码存储。

编辑:

您可以在登录时在第二卷曲调用使用

$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); 
$loginSuccess = $httpCode >= 200 && $httpCode < 400; 

这将登录后接受重定向为好。

+0

我已经添加了脚本,可以告诉我该怎么做? – kanwarpal 2012-03-05 11:42:29

+0

看到我的更新... – 2012-03-05 22:43:31