PHP CURLメソッドを使用して、アプリケーションへのログインを自動化しようとしています。
アプリケーションのURLは次のとおりです 。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についていくつかの一般的な質問がありました。
- ポストリクエストに必要なパラメーター(ヘッダー、POSTフィールド)を決定するための最良の方法は何ですか?(私は1つがFirebugであることを知っています)しかし、利用可能なツールはありますか?
回答:HTTPFox(Firefoxプラグイン)を使用しましたが、リクエスト後のパラメーターを決定し、Cookie情報をキャプチャして表示するのに最適であることがわかりました。
CURL投稿リクエストをデバッグするための最良の方法は何ですか?
ログインページを、フォームで提供されたアクション属性のURLまたはURLとして指定する必要がありますか?
回答:これまでのところ、Actionパラメーターの値を使用した投稿リクエストはうまくいきました。
編集 - - - -
パラメータの絶対パスを指定した後、コードが機能し始めました
CURLOPT_COOKIEJAR
CURLOPT_COOKIEFILE
同じことを反映するようにコードを更新しました。また、投稿が機能するために必要なCookieの初期セットを取得するために、最初に単純なgetを実行する必要がありました。
GETリクエストは同じcurlパラメーターを使用していました。