@arturka_v_10

Почему cURL шлет ответ 200?

Есть
func.php
// регулярка обрезки для заголовка
function repURI($url){

$row = preg_replace('#^http://#','',$url);
$row = preg_replace('#^http(s)://#','',$row);
return $row;
}

// curl авторизация бота
function curl_login($urlcheck,$post,$headers,$useragent,$referer){
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $urlcheck);
    curl_setopt($ch, CURLOPT_HEADER, 0);
    curl_setopt($ch, CURLOPT_USERAGENT, $useragent);
    curl_setopt($ch, CURLOPT_REFERER, $referer);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_POST, true);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    // curl_setopt($ch, CURLOPT_COOKIESESSION, true);
    curl_setopt($ch, CURLOPT_COOKIEJAR, "/logs/cookies.txt");
    curl_setopt($ch, CURLOPT_COOKIEFILE, "/logs/cookies.txt");
    //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    $data = curl_exec($ch);
   
    return $ch;
}

// curl
function curl_getAuth($url,$headers,$ch) {
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, false);

$content = curl_exec($ch);
$info = curl_getinfo($ch);

return $info;

curl_close($ch);
}


Страница обрабатывающая запрос (на нее ссылается действие по клику ajax)
account.php:
<?
$referer='http://www.google.com'; // имитируем переход на сайт с гугла
$useragent='Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/61.0.3163.100 YaBrowser/17.10.1.1204 Yowser/2.5 Safari/537.36'; // имитация браузера

$uri = 'http://flower-meadow.ru';

$replaceURIH = repURI($uri); // фильтруем от http:// и https:// для заголовка
$replaceURI = $uri; // оригинальный линк (без фильтров) для логина

// шлем заголовок
$headers=array(
'Host: '.$replaceURIH,
'User-Agent: '.$useragent,
'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8',
'Accept-Language:ru,en;q=0.8,bg;q=0.6,fr;q=0.4',
'Connection: keep-alive',
);

// отправка данных для логина (они не верны но отдает статус 200)
$post_log = array(
'log_email' => 'circa@mail.ru',
'pass' => 'circa',
);

$authLink = $replaceURI."/account";
$ch2=curl_login($replaceURI,$post_log,$headers,$useragent,$referer); // логин
$results = curl_getAuth($authLink,$headers,$ch2); // получаем страницу account
$results = $results['http_code'];
echo request($a,1,"[$results]"); // отдает в блоке зеленого цвета статус 200
?>


Данные заведомо неверны. Если в браузере я их ввожу получаю ответ 302. А скрипт отдает 200. Запарился не соображу, где оплошность.
  • Вопрос задан
  • 350 просмотров
Пригласить эксперта
Ответы на вопрос 2
Akdmeh
@Akdmeh
PHP, Yii2, Music
Я не стал глубоко разбираться в вашем вопросе (извините), но есть такая опция как CURLOPT_FOLLOWLOCATION
Если CURL получает 302 код - он может автоматически возвратить результат Location. Установите CURLOPT_FOLLOWLOCATION в false и проверьте, не изменилось ли чего
Ответ написан
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
А при чем тут код ошибки в верность данных?
1. Если авторизация не верна, то вероятно стоит отдавать 403 а не 302
2. код 200 это ответ сервера, который понятия не имеет, что там Ваш php скрипт проверяет. Так что если запрос сервером обработан и ошибок в выполнении скрипта нет, то 200 - это вполне очевидный ответ.
3. Если почему-то Вы решили делать переадресацию при ошибках валидации и при этом использовать 302 редирект, то как сказал Андрей Павленко надо добавить СURLOPT_FOLLOWLOCATION
4. Зачем нужен func.php и curl вообще если, у Вас страница по ajax обращаться может сразу в account.php? И почему бы на этот случай в account.php не предусмотреть ответ в виде json, а не переадресации.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы