Php 使用CURL和Ajax进行授权
我需要在管理面板中自动执行一些操作。但我不能得到授权 在身份验证页面上有一个表单,其中包含以下字段:\ u csrf、电子邮件、密码。此表单由ajax处理:Php 使用CURL和Ajax进行授权,php,curl,Php,Curl,我需要在管理面板中自动执行一些操作。但我不能得到授权 在身份验证页面上有一个表单,其中包含以下字段:\ u csrf、电子邮件、密码。此表单由ajax处理: submitLogin: function submitLogin(event) { var $input = $(event.currentTarget), $form = $(event.currentTarget).closest('form'); console.log('submitLogin')
submitLogin: function submitLogin(event) {
var $input = $(event.currentTarget),
$form = $(event.currentTarget).closest('form');
console.log('submitLogin');
var spinner = '<div class="js-loaded_wrapper"><div class="js-loaded"></div></div>';
$('body').find('.button__login').html(spinner);
$('body').find('.button__login').prop('disabled', true);
App.ajax({
type: 'POST',
url: $form.attr('action'),
data: $form.serialize(),
callback: function callback(response) {
if (response.status === true) {
window.location.replace(response.response.action.redirect);
}
if (response.status === false) {
$('#login-form').find('.yii__input_error').remove();
_.each(response.response, function (error, key) {
$('#login-form').find(':input[name=' + key + ']').first().closest('div').append('<div class="yii__input_error">' + error[0] + '</div>');
}, this);
var loginButton = $('body').find('.button__login');
$(loginButton).html($(loginButton).val());
$(loginButton).prop('disabled', false);
}
}
});
}
生成的cookies文件如下所示:
# Netscape HTTP Cookie File
# https://curl.haxx.se/docs/http-cookies.html
# This file was generated by libcurl! Edit at your own risk.
.mediavenus.com TRUE / FALSE 0 FSID 7umuoi99pbs8cf62uugmoglhf5
#HttpOnly_mediavenus.com FALSE / FALSE 0 _csrf 5c849ef13ae19a61f4c5a43d6796f1b5913ff34a9374803eeaf75a80d9122d3ba%3A2%3A%7Bi%3A0%3Bs%3A5%3A%22_csrf%22%3Bi%3A1%3Bs%3A32%3A%22Z0O-FriufOx-FTHGQO3Lx6H_bs7-7bsK%22%3B%7D
mediavenus.com FALSE / FALSE 1924991999 ipp_uid2 0aRtuiOGxLQfrRmC/tSwUvm390OA8SQTAITkrfA==
mediavenus.com FALSE / FALSE 1924991999 ipp_uid1 1500879752900
mediavenus.com FALSE / FALSE 1503471753 rerf AAAAAFl1m4m0yoBfAyN0Ag==
但firefox显示了更多数据:
第2步。我正在尝试登录:
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, 'https://mediavenus.com/site/ajax-login');
curl_setopt($curl, CURLOPT_HEADER, 0);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_CONNECTTIMEOUT, 30);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_COOKIEJAR, dirname(__FILE__) . '/cookie.txt');
curl_setopt($curl, CURLOPT_COOKIEFILE, dirname(__FILE__) . '/cookie.txt');
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, json_encode(array(
'_csrf' => $csrf, // here variable from step 1
'email' => $email, // here my login
'password' => $password // here my password
)));
$html = curl_exec($curl);
curl_close($curl);
服务器返回错误:“无法验证您提交的数据”
但如果更改COLLOPT_POSTFIELDS:
curl_setopt($curl, CURLOPT_POSTFIELDS, '_csrf=' . $csrf . '&email=' . $email . '&password=' . $password);
然后服务器再次返回登录页面
告诉我我做错了什么尝试将
X-request-With:XMLHttpRequest
头添加到您的请求中。另外,您应该首先对这些变量使用urlencode
。urlencode($csrf)代码>。如果要将数组传递给CURLOPT\u POSTFIELDS
,则不必使用json\u encode
。我添加了X-request-With:XMLHttpRequest头并成功通过了身份验证。谢谢
curl_setopt($curl, CURLOPT_POSTFIELDS, '_csrf=' . $csrf . '&email=' . $email . '&password=' . $password);