我正在尝试使用 PHP CURL 方法尝试自动登录到应用程序。
我调用 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 的一般性问题:
- 确定发布请求所需的参数(标题、POST 字段)的最佳方法是什么?(我知道一个是 Firebug)但是有可用的工具吗?
Ans:我使用了 HTTPFox(一个 firefox 插件),发现它非常适合确定 post 请求参数以及捕获和查看 cookie 信息
调试 CURL 发布请求的最佳方法是什么?
我们应该将登录页面作为 URL 还是表单中提供的操作属性的 url 提供?
Ans:到目前为止,使用 Action 参数值的 post 请求对我有用。
编辑 - - - -
在我提供参数的绝对路径后,代码开始工作
CURLOPT_COOKIEJAR
CURLOPT_COOKIEFILE
我已经更新了代码以反映相同的情况,并且我还必须先执行一个简单的 get 来获取发布工作所需的初始 cookie 集。
GET 请求具有相同的 curl 参数。