使用Post方法自动登录

时间:2012-10-14 04:42:13

标签: php curl

我正在尝试使用PHP CURL方法尝试自动登录到应用程序。

该应用程序的网址是: https://www.test.accounts.xerox.com/auth/login.jsf?Xcntry=USA&Xlang=en_US&next_page=https://uscbopoc.external.xerox.com:4430/eservice_enu/

我调用CURL请求的PHP代码是:

 $url = 'https://www.test.accounts.xerox.com/auth/login.jsf?Xcntry=USA&Xlang=en_US';
 $cookie = "cookie.txt";   
 $postData    = array( 
                       '_id171:username' => 'XXXX',
                       '_id171:password' => 'XXXX',
                       '_id171:submitLogin' => '_id171_SUBMIT',
                       'nextpage' => 'next_page=https://uscbopoc.external.xerox.com:4430/eservice_enu/'
                      );

 $ch = curl_init();
 curl_setopt($ch, CURLOPT_URL, $url);
 //curl_setopt($ch, CURLOPT_HTTPHEADER

 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
 curl_setopt($ch, CURLOPT_POST, true);
 curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
 curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/537.4 (KHTML, like Gecko) Chrome/22.0.1229.94 Safari/537.4");
 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch,CURLOPT_HTTPHEADER,array(
                                          'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
                                          'Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3',
                                          'Accept-Encoding: gzip,deflate,sdch',
                                          'Accept-Language: en-US,en;q=0.8',
                                          'Cache-Control: max-age=0',
                                          'Connection: keep-alive',
                                          'Content-Type:application/x-www-form-urlencoded',
                                          'Host:www.test.accounts.xerox.com',
                                          'Origin:https://www.test.accounts.xerox.com'
                                          ));


 curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
 curl_setopt($ch,CURLOPT_REFERER,'https://www.test.accounts.xerox.com/auth/login.jsf?Xcntry=USA&Xlang=en_US&next_page=https://uscbopoc.external.xerox.com:4430/eservice_enu/');
 curl_setopt($ch, CURLOPT_POSTFIELDS, $postData);
 curl_setopt ($ch, CURLOPT_COOKIEJAR,"c:\\wamp\www\\cookie.txt");
 curl_setopt ($ch, CURLOPT_COOKIEFILE,"c:\\wamp\www\\cookie.txt");

 curl_close($ch);
 return $output;

下面是我的curl_getinfo函数输出

   array
   'url' => string 'https://www.test.accounts.xerox.com/auth/login.jsf?Xcntry=USA&Xlang=en_US' (length=73)
   'content_type' => string 'text/html;charset=UTF-8' (length=23)
   'http_code' => int 200
   'header_size' => int 648
   'request_size' => int 778
   'filetime' => int -1
   'ssl_verify_result' => int 20
   'redirect_count' => int 0
   'total_time' => float 0.969
   'namelookup_time' => float 0
   'connect_time' => float 0.078
   'pretransfer_time' => float 0.407
   'size_upload' => float 568
   'size_download' => float 96789
   'speed_download' => float 99885
   'speed_upload' => float 586
   'download_content_length' => float -1
   'upload_content_length' => float 568
   'starttransfer_time' => float 0.469
   'redirect_time' => float 0
   'certinfo' => 
   array
   empty
   'redirect_url' => string '' (length=0)

但我总是以回复的方式返回登录页面。我认为主要的问题可能是cookie,但我是PHP和CURL的新手,所以我不确定。

如果有人能指出正确的方向,我也有一些关于CURL的一般性问题:

  1. 确定发布请求所需的参数(标题,POST字段)的最佳方法是什么? (我知道一个是Firebug)但有工具可用吗?
  2.   

    Ans:我使用了HTTPFox(一个firefox插件),发现它很完美   确定post请求参数以及捕获和查看   cookies信息

    1. 调试CURL帖子请求的最佳方法是什么?

    2. 我们是否应该将Login Page作为表单中提供的action属性的URL或url?

    3.   

      Ans:到目前为止,使用Action参数值的post请求   为我工作过。

      编辑--------

      在我提供参数的绝对路径

      之后,代码开始工作
        CURLOPT_COOKIEJAR
        CURLOPT_COOKIEFILE 
      

      我已更新代码以反映相同内容,我还必须首先执行一个简单的获取,以获取发布工作所需的初始Cookie集。

      GET请求具有相同的curl参数。

1 个答案:

答案 0 :(得分:0)

  

确定发布请求所需的参数(标题,POST字段)的最佳方法是什么? (我知道一个是Firebug)但有工具吗?

是的,Firebug是一个可用的工具。这里的情况是你需要在那里查看请求的工作,所以通常是浏览器内部的工具,如Firebug或Chromium开发人员工具。

  

调试CURL帖子请求的最佳方法是什么?

Curl verbose选项。

  

是否有在线提供的教程可以通过示例解释高级CURL功能?

当然,只需搜索stackoverflow。这里只是一个例子,详细说明:

  

我们是否应该将Login Page作为表单中提供的action属性的URL或url?

这取决于你需要做什么,通常不能回答。