Php 为什么这个cURL-post登录请求不起作用?

Php 为什么这个cURL-post登录请求不起作用?,php,curl,xampp,php-curl,Php,Curl,Xampp,Php Curl,我正在尝试登录 当我手动登录并检查浏览器控制台->网络->帖子->标题/参数时,我得到以下信息:- form_key: viiRqZigH0YPC9wu login[username]: myusername login[password]: mypassword send: 请注意,每次我登录并发送时,form_密钥都会更改,并且始终为空。 因此,我在cURL POST请求中使用了以下代码:- $data = array( 'login[username]' => 'myus

我正在尝试登录

当我手动登录并检查浏览器控制台->网络->帖子->标题/参数时,我得到以下信息:-

form_key: viiRqZigH0YPC9wu
login[username]: myusername
login[password]: mypassword
send: 
请注意,每次我登录并发送时,form_密钥都会更改,并且始终为空。 因此,我在cURL POST请求中使用了以下代码:-

$data = array(
    'login[username]' => 'myusername',
    'login[password]' => 'mypassword',
    'send' => '',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "https://b2b.chiemsee.com/customer/account/login/");
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // to allow redirections
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // to avoid error
curl_setopt($ch, CURLOPT_POST, true); // to send info
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt'); // to save cookie data for login
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // to get the html
$response = curl_exec($ch);
if (curl_error($ch)) {
    $error_msg = curl_error($ch);
    var_dump($error_msg);
    exit;
}
curl_close($ch);
echo $response;

但它只是加载了登录页面,什么也没发生,甚至连无效登录的错误都没有发生。

有几个原因可以很容易地确定其中的几个:

1:在发送登录请求之前,您需要一个cookie会话,但您的代码不会首先创建cookie会话

2:您的登录请求需要一个CSRF令牌,但是您在登录之前不获取CSRF令牌。CSRF令牌与cookie会话一起接收,顺便说一句,您在相同的响应中获得CSRF令牌和cookie会话

3:您以multipart/form数据格式发送登录参数,但此登录页面使用application/x-www-form-urlencoded-format

4:此页面在登录请求中需要大量自定义HTTP头,您的代码没有提供这些头,包括但不限于X-Magento-Action:customer\u account\u loginPost和X-XSS-Protection:1


这也是一个观察,您的登录错误检查代码非常缺乏。

您不需要表单密钥吗?@apokryfos表单密钥在每次登录时都是不同的,所以我该如何使用它?首先获取表单页面并从中取出密钥,然后发送请求。可能是表单键是一个。确保使用相同的cookie jar,以便模拟用户session@apokryfos整个html以字符串形式出现在$response中。我的正则表达式不会获得form_键值。请您引导我到这里好吗?不要关闭CURLOPT_SSL_VERIFYPEER。