php curl登录问题

时间:2010-05-03 10:40:22

标签: php curl

<?php
// create a new CURL resource
$file_path = '/mail';
define("COOKIE_FILE", "c:\cookie.txt");
$ch = curl_init();
// set URL and other appropriate options
curl_setopt($ch, CURLOPT_URL, "https://mail.gov.in/iwc/signin");

curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIESESSION, TRUE);
session_write_close();
$strCookie = 'PHPSESSID=d095af0e30afc021dd3652734009' . $_COOKIE['PHPSESSID'] . '; path=/mail';
curl_setopt( $ch, CURLOPT_COOKIE, $strCookie );
curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);

curl_setopt ($ch, CURLOPT_POST, 1);

curl_setopt ($ch, CURLOPT_POSTFIELDS,'fromLogin=true&domainName=nic.in&username=&password=&button=Sign%20In');

$url = curl_getinfo($ch);

// grab URL and pass it to the browser
$data = curl_exec($ch);
echo $data."<pre>";

echo "<pre>";
print_r($url);

// close CURL resource, and free up system resources
curl_close($ch);
?>

我的代码有什么问题,为什么我无法直接在他们的邮件中登录

5 个答案:

答案 0 :(得分:2)

您似乎正在尝试屏幕抓取网络邮件收件箱。要获得帮助,您需要提供更多信息。

但是,PHP提供了直接访问POP3邮箱的可能性:IMAP Functions在用户提供的注释中,似乎有a full-fledged code snippet访问POP3邮箱。

答案 1 :(得分:2)

在http header&amp;中使用curl_setopt($ ch,CURLOPT_COOKIE,$ strCookie)作为cookie。编辑你的代码以获得$ strCookie值,这个phpsession id值将无效..

1. $strCookie = 'PHPSESSID=d095af0e30afc021dd3652734009' . $_COOKIE['PHPSESSID'] . '; path=/mail';
你可以像这样重写你的strcookie

2. $strCookie = 'PHPSESSID=' . $_COOKIE['PHPSESSID'] . '; path=/mail';

或者你可以使用CURLOPT_COOKIEFILE&amp; CURLOPT_COOKIEJAR将cookie保存在文件中(没有CURLOPT_COOKIE)

if(!file_exists(COOKIE_FILE)) {
    $fh = fopen(COOKIE_FILE, "w");
    fwrite($fh,"");
    fclose($fh); 
} 
curl_setopt ($ch, CURLOPT_COOKIEJAR, COOKIE_FILE);
curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);

希望这有用

答案 2 :(得分:1)

您正在设置硬编码会话ID,然后加载COOKIE_FILE。确保已经在cookie文件中没有另一个PHPSESSID cookie。它可能会覆盖您刚刚手动设置的会话ID。

同样,您在POST数据中传递用户名和密码密钥,但实际上并未发送用户名和密码。也许你已经从这篇文章中审查了他们,但值得指出。它应该很可能是“....&amp; username = SOMEUSER&amp; password = SOMEPASSWORD”。

然后您执行curl_getinfo(),但您尚未进行curl_exec()调用,因此除了某些CURL内部设置外,没有任何内容可用于获取信息。

您可能想要在输出之前检查$data是否为FALSE,以防CURL中出现故障:

$data = curl_exec($ch);
$info = curl_getinfo($ch);
if ($data === FALSE) {
    print("CURL failed: " . curl_error($ch) . "\n");
}
var_dump($info); // print out full information array from curl
var_dump($data); // print out anything the server may have returned

答案 3 :(得分:0)

可能会检查引用者,CURLOPT_REFERER。

答案 4 :(得分:0)

检查CURLOPT_POSTFIELDS:登录密码和用户名在哪里? 您设置CURLOPT_COOKIE,其中包含您提供的Cookie,但curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIE_FILE);执行相同的操作。