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