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

如何使用curl和PHP登录网站?,php,curl,login,Php,Curl,Login,我试图远程登录到一个站点。我已经成功地做到了这一点,登录页打开正确,我可以提取所有信息从它。问题是,当我点击任何链接时,网站会将我注销!之前的链接是相对于我的域名的,现在我已经将其更改为网站域名,但问题仍然存在。我附上代码,让你看看我是如何发送cookies的 我已经对网站内的另一个URL执行了另一个curl\u exec,但网站将我注销 <html> <head> <base href="http://example.com/" /> <body

我试图远程登录到一个站点。我已经成功地做到了这一点,登录页打开正确,我可以提取所有信息从它。问题是,当我点击任何链接时,网站会将我注销!之前的链接是相对于我的域名的,现在我已经将其更改为网站域名,但问题仍然存在。我附上代码,让你看看我是如何发送cookies的

我已经对网站内的另一个URL执行了另一个
curl\u 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的扩展。我错过了什么

你在用cookiejar和cookiefile做什么?这些不是用于设置cookie的,会话变量不应硬编码,而是从对ASP web服务器的第一个请求中获取

您希望将cookiejar和cookiefile设置为文档中规定的值:

CURLOPT_COOKIEFILE包含cookie数据的文件的名称。 cookie文件可以是Netscape格式,也可以是纯HTTP样式 将标题转储到文件中。
CURLOPT_COOKIEJAR要删除的文件名 将所有内部Cookie保存到手柄关闭时,例如 打电话叫你关门


因此,没有cookie数据,而是文件的路径。通过这种方式,会话cookie(和其他cookie)将被存储并在后续请求中使用。

您如何处理cookiejar和cookiefile?这些不是用于设置cookie的,会话变量不应硬编码,而是从对ASP web服务器的第一个请求中获取

您希望将cookiejar和cookiefile设置为文档中规定的值:

CURLOPT_COOKIEFILE包含cookie数据的文件的名称。 cookie文件可以是Netscape格式,也可以是纯HTTP样式 将标题转储到文件中。
CURLOPT_COOKIEJAR要删除的文件名 将所有内部Cookie保存到手柄关闭时,例如 打电话叫你关门


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

感谢您的回复!即使我用了像。。(CURLOPT_cookie文件,“tmp/cookie”);它仍然做同样的事情。。有人说你需要使用完整路径而不是相对路径,这可能是问题所在吗?我甚至试过这样做。。curl_setopt($ch,CURLOPT_COOKIEJAR,dirname(文件)。'/cookie.txt');curl_setopt($ch,CURLOPT_COOKIEFILE,dirname(FILE)。'/cookie.txt');我用了一个简单的txt文件名,一个完整的绝对文件路径,所有的一切。是否需要添加会话_start();在顶部?谢谢回复!即使我用了像。。(CURLOPT_cookie文件,“tmp/cookie”);它仍然做同样的事情。。有人说你需要使用完整路径而不是相对路径,这可能是问题所在吗?我甚至试过这样做。。curl_setopt($ch,CURLOPT_COOKIEJAR,dirname(文件)。'/cookie.txt');curl_setopt($ch,CURLOPT_COOKIEFILE,dirname(FILE)。'/cookie.txt');我用了一个简单的txt文件名,一个完整的绝对文件路径,所有的一切。是否需要添加会话_start();在顶部?看这里:这可能是你的问题看这里:这可能是你的问题