Arhn - архитектура программирования

cURL не работает правильно

В настоящее время я работаю над сценарием, в котором пользователь должен ввести имя пользователя и пароль. Затем, когда пользователь входит в систему, скрипт проверяет, зарегистрировано ли его/ее имя пользователя в моей базе данных. Если это так, пользователь входит в систему на моем внешнем веб-сайте (используя cURL), а в противном случае пользователь входит в систему на другом веб-сайте, к базе данных которого у меня нет доступа.

if($count==1){
    $curl = curl_init('http://www.myownwebsite.com/');
    curl_setopt ($curl, CURLOPT_POSTFIELDS, "gebruikersnaam=$myusername&wachtwoord=$mypassword");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($curl);
}
else {
    $curl = curl_init('http://www.differentwebsite.com/');
    curl_setopt ($curl, CURLOPT_POSTFIELDS, "username=$myusername&password=$mypassword");
    curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
    curl_exec($curl);
}

как видите, мой скрипт хранит количество строк в переменной count, и если запрос дает 1 строку, он регистрируется на моем сайте, а если нет, то на другом сайте. Проверка имени пользователя и пароля выполняется на реальных веб-сайтах, на которые заходит пользователь.

Теперь моя проблема в том, что я хочу, чтобы он «следил за местоположением», так сказать. Сценарий, как сейчас, перенаправляет (?), например, на http://www.myownwebsite.com/checklogin.php (checklogin.php — это скрипт, в котором я использую cURL).

Я попытался решить эту проблему, используя функцию cURL FollowLocation, но это дает мне предупреждение:

Предупреждение: curl_setopt(): CURLOPT_FOLLOWLOCATION не может быть активирован, когда включен безопасный_режим или установлен open_basedir в -----

Я проверил свой php.ini с помощью phpinfo(); функция и безопасный режим отключены, open_basedir не имеет значения, поэтому я не думаю, что это проблема. Я искал другие возможные решения, но пока ничего не помогло мне решить эту проблему.

Если что-то непонятно, не стесняйтесь спрашивать.

13.03.2013

  • Каково значение CURLOPT_MAXREDIRS ? 13.03.2013
  • В скрипте нет maxredirs, так что, наверное, это значение по умолчанию? Нужно ли мне что-то с этим делать? 13.03.2013
  • Как я вижу... вы используете CURLOPT_POSTFIELDS, но не устанавливаете значение для CURLOPT_POST... Вы устанавливаете его где-то еще?..? 13.03.2013
  • Прочтите сообщение об ошибке еще раз. Ваше устранение неполадок пока не дало правильных результатов, так как вы можете либо включить safe_mode, либо установить open_basedir. Вы говорите, что и то, и другое не так. Пожалуйста, перепроверьте с конкретным запросом, который терпит неудачу. Скорее всего, это не то, что вы проверяли в другом месте. Всегда устраняйте неполадки по конкретному запросу, а не по какому-то другому замку в небе. - См. также Php - Отладка Curl 13.03.2013
  • @new_developer Это неправильно, подразумевается CURLOPT_POST. 13.03.2013
  • Я бы добавил CURLOPT_VERBOSE и посмотрел, почему он не перенаправляет. 13.03.2013
  • @ Джек: Нет, это не так. По крайней мере, это было не вчера, когда я проверял это. 13.03.2013
  • @hakre Я почти уверен, что это так, но я проверю :) 13.03.2013
  • @TienusMcVinger посмотрите stackoverflow.com/questions/6918623/ и webhostingtalk.com/showthread.php?t=644247 13.03.2013
  • @hakre Поведение другое; когда используется массив, кажется, что подразумевается CURLOPT_UPLOAD; для строки это CURLOPT_POST :) php 5.4.12 13.03.2013
  • Хорошо, я попытался использовать этот curl_setopt ($ curl, CURLOPT_VERBOSE, true); поместив его перед оператором if-else, но я не получил никакого другого выходного сообщения. Что я делаю неправильно? 13.03.2013
  • Что именно вы пытаетесь сделать и как это терпит неудачу? Что вы имеете в виду под Я хочу, чтобы он следовал за местоположением? 13.03.2013
  • @Jack: Я должен исправить себя, это также подразумевает использование массива. 13.03.2013
  • @Ranty, я хочу, чтобы после проверки базы данных и всего этого он вошел в систему на сайте, на который он вас перенаправляет, как если бы пользователь ввел свое имя пользователя и пароль на этом веб-сайте (веб-сайт, на который он вас перенаправил к). 13.03.2013

Ответы:


1

Вы не можете войти в систему пользователь, отправив запрос POST на страницу входа с вашего сервера. Что происходит, так это то, что вы входите в свой сервер, а не пользователь.

Кроме того, вы не можете перенаправить пользователя с данными POST с помощью PHP. Все, что вы можете сделать, это создать форму с method="POST" и action="http://www.differentwebsite.com/" со скрытыми полями username и password, которые будут отправлены через JavaScript при загрузке страницы. Вот простой пример страницы, которую вы можете вывести.

<html>
<head>
<script type="text/javascript">
function submit_form()
{
    document.myform.submit();
}
</script>
</head>
<body onload="submit_form();">
    <form method="POST" name="myform" action="http://www.google.com/">
        <input type="hidden" name="username" value="someusername"/>
        <input type="hidden" name="password" value="somepassword"/>
    </form>
</body>
</html>

Что касается того, почему вы перенаправляете пользователя, это связано с тем, что вы пропустили:

curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

поэтому вывод отправляется пользователю напрямую.

13.03.2013
  • Хм, я совсем запутался. Как мне это реализовать? После добавления curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); с тем же предупреждением. Я знаю, что простое добавление RETURNTRANSFER в любом случае не должно было решить эту проблему, но просто чтобы вы знали. Как именно мне реализовать эту форму со скрытыми полями? 13.03.2013
  • Ах да, немного поигравшись, у меня все заработало. Спасибо! 14.03.2013
  • Новые материалы

    Коллекции публикаций по глубокому обучению
    Последние пару месяцев я создавал коллекции последних академических публикаций по различным подполям глубокого обучения в моем блоге https://amundtveit.com - эта публикация дает обзор 25..

    Представляем: Pepita
    Фреймворк JavaScript с открытым исходным кодом Я знаю, что недостатка в фреймворках JavaScript нет. Но я просто не мог остановиться. Я хотел написать что-то сам, со своими собственными..

    Советы по коду Laravel #2
    1-) Найти // You can specify the columns you need // in when you use the find method on a model User::find(‘id’, [‘email’,’name’]); // You can increment or decrement // a field in..

    Работа с временными рядами спутниковых изображений, часть 3 (аналитика данных)
    Анализ временных рядов спутниковых изображений для данных наблюдений за большой Землей (arXiv) Автор: Рольф Симоэс , Жильберто Камара , Жильберто Кейрос , Фелипе Соуза , Педро Р. Андраде ,..

    3 способа решить квадратное уравнение (3-й мой любимый) -
    1. Методом факторизации — 2. Используя квадратичную формулу — 3. Заполнив квадрат — Давайте поймем это, решив это простое уравнение: Мы пытаемся сделать LHS,..

    Создание VR-миров с A-Frame
    Виртуальная реальность (и дополненная реальность) стали главными модными терминами в образовательных технологиях. С недорогими VR-гарнитурами, такими как Google Cardboard , и использованием..

    Демистификация рекурсии
    КОДЕКС Демистификация рекурсии Упрощенная концепция ошеломляющей О чем весь этот шум? Рекурсия, кажется, единственная тема, от которой у каждого начинающего студента-информатика..