如何使用curl和PHP登录网站?

时间:2011-09-04 12:20:44

标签: php curl login

我试图远程登录网站。我已成功完成此操作,并且登录页面正常打开,我可以从中提取所有信息。问题是,当我点击任何链接时,网站会将我退出!之前该链接与我的域名相关,现在我已将其更改为网站域名,但问题仍然存在。我正在为您附上代码,以了解我是如何发送Cookie的。

我已经在网站中的另一个网址上执行了另一个curl_exec,但该网站会将我注销!

<html> 
<head> 
<base href="http://example.com/" /> 
<body> 
<?php 
$username = $_POST["uname"]; 
$password = $_POST["pass"]; 
$fields = "username=" . $username . "&password=" . $password . "&Login.x=61&Login.y=15"; 
$ch=curl_init(); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); 

curl_setopt($ch, CURLOPT_URL, 'http://www.SOMESITE.net/amizone/default.aspx'); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_COOKIEJAR, "ASPSESSIONIDSQADDRBQ=OCALKIGABGLPCJLKMGIKJLLF"); //I got this exact cookiename from LiveHTTPheaders (Firefox extension)
curl_setopt($ch, CURLOPT_COOKIEFILE, "ASPSESSIONIDSQADDRBQ=OCALKIGABGLPCJLKMGIKJLLF"); 
curl_setopt($ch, CURLOPT_COOKIESESSION, TRUE); 
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 1000 ); 
curl_setopt($ch, CURLOPT_TIMEOUT, 10000 ); 
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.0.8) Gecko/20061025 Firefox/1.5.0.8' ); 
curl_setopt($ch, CURLOPT_AUTOREFERER, 1 ); 
curl_setopt ($ch, CURLOPT_REFERER, "http://www.example.com/"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0 ); 
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0 ); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt($ch, CURLOPT_POST, 1); 
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields); 
ob_start(); //the issue with the script remains with/without ob_start/ob_end_clean
$raw_data=curl_exec($ch); 
curl_setopt($ch, CURLOPT_POST, 0); //at this point im trying to get another page using curl. since i will not be using post i have set it to 0.
curl_setopt($ch, CURLOPT_URL, 'http:/site.net/amizone/WebForms/TimeTable/StudentTimeTableForWeek.aspx'); 
$ttable = curl_exec($ch); 
ob_end_clean(); 
echo $ttable; 
//curl_close($ch); 
//$raw_data = preg_replace('/\s(1,)/',' ',$raw_data); //clean it up 
//echo $raw_data; 
//$raw_data = stripslashes($raw_data); 
//$raw_data = explode("<strong>",$raw_data); 
//2 3 and 4 
//echo htmlentities($raw_data[4]); 
?> 
</body> 
</html> 

注意:我从'LiveHttpHeaders'获取了cookie名称,这是Firefox的扩展。我错过了什么?

1 个答案:

答案 0 :(得分:1)

你在做什么与cookiejar和cookiefile?这些不是用于设置cookie,并且会话变量不应该是硬编码的,而是从第一次请求到ASP Web服务器获得。

您希望根据文档将cookiejar和cookiefile设置为值:

  

CURLOPT_COOKIEFILE 包含Cookie数据的文件的名称。   cookie文件可以是Netscape格式,也可以是纯HTTP格式   标头转储到文件中。
   CURLOPT_COOKIEJAR 要发送的文件名   将句柄关闭时保存所有内部cookie,例如之后   致电curl_close。

因此,没有cookie数据,但是文件的路径。这样,会话cookie(和其他cookie)将被存储并用于连续的请求中。