2

我正在尝试使用 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)但是有可用的工具吗?

Ans:我使用了 HTTPFox(一个 firefox 插件),发现它非常适合确定 post 请求参数以及捕获和查看 cookie 信息

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

  2. 我们应该将登录页面作为 URL 还是表单中提供的操作属性的 url 提供?

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

编辑 - - - -

在我提供参数的绝对路径后,代码开始工作

  CURLOPT_COOKIEJAR
  CURLOPT_COOKIEFILE 

我已经更新了代码以反映相同的情况,并且我还必须先执行一个简单的 get 来获取发布工作所需的初始 cookie 集。

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

4

1 回答 1

0

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

是的,Firebug 是一个可用的工具。这里的要点是您需要在请求工作的地方进行检查,因此通常是浏览器内的工具,例如 Firebug 或 Chromium 开发人员工具。

调试 CURL 发布请求的最佳方法是什么?

卷曲详细选项。

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

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

我们应该将登录页面作为 URL 还是表单中提供的操作属性的 url 提供?

这取决于您需要做什么,通常无法回答。

于 2012-10-14T21:58:05.580 回答