Проблема с отправкой данных формы POST с PHP: cURL - PullRequest
0 голосов
/ 18 марта 2020


Ниже приведены 2 фрагмента кода, результат которых должен быть идентичен (по крайней мере, я хотел бы). Этот результат заключается в том, что вы заходите на веб-сайт одним щелчком мыши, отправляя форму.
HTML работает хорошо и позволяет мне идеально подключаться.
PHP затрудняет работу. PHP / cURL работает правильно, я имею в виду, что если я изменяю переменные Логин / Пароль, сервер отправляет мне обратно «неправильный пользователь / пароль», но если я отправляю правильный Логин / Пароль, сервер превращается в глубокую медитацию и никогда не отвечает мне .

Есть ли у вас какие-либо предложения по этому поведению? (Я бы наверняка что-то пропустил ...).
Спасибо

«AutoConnect.HTM»:

<html>
<script type="text/javascript">
window.onload = function () { document.getElementById('autolog').submit(); }
</script>
<body>
<form id="autolog" action="https://website.com/account/logon" method="post">
  <input name="Login" value="User">
  <input name="Password" value="Pass">
</form>
</body>
</html>

«AutoConnect.PHP »:

<?php
 $url = 'https://website.com/account/logon';
 $postinfo = http_build_query(array(
         'Login'    => 'User',
         'Password' => 'Pass'
         ));
 $client = 'Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)';
 $header = array(
        'Connection: Keep-Alive',
        'Accept: */*',
        'Accept-Language: fr-FR',
        'Content-type: application/x-www-form-urlencoded',
        'Content-Length: '.(strlen($postinfo))
        );
 $options = array(
        CURLOPT_HTTPHEADER     => $header,
        CURLOPT_HEADER         => false,
        CURLOPT_FOLLOWLOCATION => true,
        CURLOPT_USERAGENT      => $client,
        CURLOPT_AUTOREFERER    => true,
        CURLOPT_POST           => 1,
        CURLOPT_POSTFIELDS     => $postinfo,
        CURLOPT_SSL_VERIFYPEER => false,
        CURLOPT_URL            => $url
        );
 $ch = curl_init();
 curl_setopt_array($ch,$options);
 $result = curl_exec($ch); 
 curl_close($ch);
 echo $result;
?>

1 Ответ

0 голосов
/ 18 марта 2020

После нескольких часов блуждания в Интернете, я сделал это!
Было решение для stackoverflow, но мне не хватало ключевого слова.
Сервер, к которому я пытаюсь подключиться, это сервер «ASP» с ASPXAUTH.
Использование куки должно быть интегрировано. Я даю вам окончательный PHP код:

<?php
$url   = 'https://website.com/account/logon';
$post  = http_build_query(array(
         'Login'    => 'User',
         'Password' => 'Pass'
         ));
$client = 'Mozilla/4.0 (compatible; Win32; WinHttp.WinHttpRequest.5)';
$ckfile= 'MyCookie.txt'; 
$options1= array(
        CURLOPT_HEADER         => 0,
        CURLOPT_SSL_VERIFYPEER => false,   // accepts all certificats
        CURLOPT_SSL_VERIFYHOST => false,
        CURLOPT_USERAGENT      => $client,
        CURLOPT_COOKIEJAR      => $ckfile, // cookie needed 
        CURLOPT_RETURNTRANSFER => true,    // returns string
        CURLOPT_FOLLOWLOCATION => true
        );
$options2= array(
        CURLOPT_COOKIEFILE     => $ckfile, // cookie used
        CURLOPT_POST           => true,
        CURLOPT_POSTFIELDS     => $post    // form datas
        );
$ch      = curl_init($url);
curl_setopt_array($ch,$options1);
$output = curl_exec($ch); 
curl_setopt_array($ch,$options2);
$output = curl_exec($ch); 
echo $output;
?>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...