2012-02-26 210 views
0

我努力让自己在这里PHP卷曲登录和获取数据

https://login.comcast.net/login 

的PHP应用程序,用于登录Comcast和下载文件

http://xfinity.comcast.net/ 

记住饼干。

这是我到目前为止有:

<?php 
$username="username"; 
$password="password"; 
$url="https://login.comcast.net/login"; 
$cookie="cookie.txt"; 

$postdata = "user=".$username."&passwd=".$password."&rm=2&deviceAuthn=false&forceAuthn=true&s=ccentral-cima&r=comcast.net&continue=http://xfinity.comcast.net/"; 

$ch = curl_init(); 
curl_setopt ($ch, CURLOPT_URL, $url); 
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, 0); 
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 
curl_setopt ($ch, CURLOPT_COOKIEJAR, $cookie); 
curl_setopt ($ch, CURLOPT_REFERER, $url); 

curl_setopt ($ch, CURLOPT_POSTFIELDS, $postdata); 
curl_setopt ($ch, CURLOPT_POST, 1); 
$result = curl_exec ($ch); 

echo $result; 
curl_close($ch); 
file_put_contents("page.txt",$ch); 

echo $cookie; 
?> 

什么这个脚本不只是登录,并告诉我

https://customer.comcast.com/Public/Home.aspx 

因为我是登录,然后当我按下电子邮件的例如它简单地对待我像我从未登录,要求我的用户名和密码。我想要的是通过将http://xfinity.comcast.net/(带有cookie)保存到page.txt中来获取电子邮件的数量

这可能吗?

+0

我有点困惑:首先,您通过CURL将cookie登录到cookie.txt中,然后尝试打开_browser_中的页面,希望它会在cookie.txt中查找cookie ? – raina77ow 2012-02-26 17:39:03

+0

您是否尝试过使用'CURLOPT_AUTOREFERER'和'CURLOPT_REFERER'选项? – h0tw1r3 2012-02-26 17:39:54

+0

你是对的raina77ow,你有一个点 – Master345 2012-02-26 18:11:14

回答

0

确保设置为CURLOPT_COOKIEFILE。 Jar是写入的内容,文件正在发送到服务器。

此外,如果您想在一个请求中执行这两个操作,则必须查询服务器两次。一次登录(使用CURLOPT_COOKIEJAR),第二次获取实际内容(使用CURLOPT_COOKIEFILE)。

此外,没有必要将CURLOPT_FOLLOWLOCATION设置为false作为通常的重定向登录。我会将其更改为true,只是为了确保。

+0

我会尝试所有这些,他们混淆了我的想法...如果你有一些业余时间,你可以发布代码键盘上的代码?不要担心,我会尝试这些,我不是无所作为 – Master345 2012-02-26 18:13:47

+0

@Row sure thing:https://gist.github.com/1918103可能需要一点锻炼。 – 2012-02-26 18:21:43

+0

感谢的人...但它只给我的页面http://xfinity.comcast.net/因为我没有登录...我改变了$ url到$ url_login的方式... – Master345 2012-02-26 18:31:04

0

首先,如果将卷曲线放入一个函数中,将会非常方便。

现在这些步骤应该相当容易。

编辑
确保cookie.txt与您的php文件在同一目录中。 并确保它是可写的。 (CHMOD 777) 检查:

if (is_writable('cookie.txt')) { 
    echo 'The cookie is writable'; 
} else { 
    echo 'The cookie is not writable'; 
    ## start by making it writable : 
    if (! chmod ('cookie.txt', 0777)) 
     die ('chmod() failed on file cookie.txt'); 
} 
  1. 登录和保存登录cookie数据与卷曲。 (确保cookie.txt存在并且可写)。
  2. 做另一个卷曲启用Cookie并检索页面。

事情是这样的:

//@param string $url : url of page/file 
    //@param bool $binary : binary file. 
    //@param string $post : post data in format : formvar1=VAR1&formvar2=VAR2 
    //@param string $cookie : cookie file. 

function curl($url ,$binary=false,$post=false,$cookie =false){ 

$ch = curl_init(); 

     curl_setopt ($ch, CURLOPT_URL, $url); 
     curl_setopt ($ch, CURLOPT_HEADER, 0); 
     curl_setopt($ch, CURLOPT_REFERER, $url); 
     curl_setopt($ch, CURLOPT_ENCODING, 'gzip,deflate'); 
     curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
     curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
     curl_setopt($ch, CURLOPT_TIMEOUT, 60); 
     curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); 



     if($cookie){ 

      $agent = "Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.4) Gecko/20030624 Netscape/7.1 (ax)"; 
      curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
      curl_setopt($ch, CURLOPT_COOKIEFILE, $cookie); 
      curl_setopt($ch, CURLOPT_COOKIEJAR, $cookie); 

     } 


     if($binary) 
      curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 

     if($post){ 
      curl_setopt($ch, CURLOPT_POST, true); 
      curl_setopt($ch, CURLOPT_POSTFIELDS, $post); 
     } 

    return curl_exec ($ch); 
} 

请登录:

$username="username"; 
$password="password"; 
$url="https://login.comcast.net/login"; 
$cookie="cookie.txt"; 

$postdata = "user=".$username."&passwd=".$password."&rm=2&deviceAuthn=false&forceAuthn=true&s=ccentral-cima&r=comcast.net&continue=http://xfinity.comcast.net/"; 

// function 
$ch = curl($url,false,$postdata,$cookie); 

登录吗?检查cookie.txt的内容。

第2步,获取第二页。

$url ='http://xfinity.comcast.net/' 
$cookie="cookie.txt"; 

$ch =curl($url,false,false,$cookie); 

echo $ch; 

类似的东西......让我知道它是否有效。

+0

解析错误:语法错误,在第3行D:\ xampp \ htdocs \ black \ curl_login \ test_login.php中出现意外的T_STRING ...我从未在PHP中看到过这种类型的编程,这是什么?!?如果你有时间请帮助我,我真的需要这个 – Master345 2012-02-27 14:21:49

+0

以上4行只是评论..我现在评论他们。 – 2012-02-27 14:53:27

+0

大声笑,我清除,看看是否其他代码的作品...它的作品,显示我http://xfinity.comcast.net/,因为我没有登录... Cookie丢失在某处 – Master345 2012-02-27 14:57:27