CURLOPT_FOLLOWLOCATION не может быть активирован - PullRequest
4 голосов
/ 15 июня 2011

У меня возникли некоторые проблемы с завитками, и я не знаю, как их решить.

Идея состоит в том, чтобы получить имя пользователя и pw и разместить его на внешней веб-странице.

Вот код:

$ch = curl_init(); 
  curl_setopt( $ch, CURLOPT_URL, "https://sso.uc.cl/cas/login?service=https://portaluc.puc.cl/uPortal/Login"); // URL to post 
  curl_setopt ($ch, CURLOPT_POST, 1);
  curl_setopt ($ch, CURLOPT_POSTFIELDS,         "username=$usuario&password=$pw");
  curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
  $result = curl_exec( $ch ); // runs the post 
  curl_close($ch);
  echo "Reply Response: " . $result; // echo reply response 

здесь ошибка:

Warning: curl_setopt() [function.curl-setopt]: CURLOPT_FOLLOWLOCATION cannot be activated when safe_mode is enabled or an open_basedir is set in /home/th000862/public_html/encuesta/login2.php on line 10

После этой ошибки пользователь не вошел в системувнешняя веб-страница.

Ответы [ 2 ]

7 голосов
/ 15 июня 2011

Эта ошибка означает, что ваша конфигурация PHP запрещает вам следовать местоположению.Есть несколько способов обойти эту проблему, не устанавливая дополнительные библиотеки, как предлагает @ mario.

  • Если у вас есть сервер или у вас есть права root, вы можете изменить файл php.ini, чтобы отключить его."safe_mode".
  • Вы также можете создать файл .htaccess в корне вашего документа с php_value safe_mode off в нем.
  • Вы можете добавить ini_set('safe_mode', false); в ваш файл PHP.

Если ничего из вышеперечисленного не работает, вы также можете сделать что-то вроде этого:

$ch = curl_init('https://sso.uc.cl/cas/login?service=https://portaluc.puc.cl/uPortal/Login');

curl_setopt($ch, CURLOPT_POST, TRUE);
curl_setopt($ch, CURLOPT_POSTFIELDS, 'username=' . urlencode($usuario) . '&password=' . urlencode($pw));
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, FALSE);
curl_setopt($ch, CURLOPT_NOBODY, TRUE);
curl_setopt($ch, CURLOPT_HEADER, TRUE);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($ch, CURLOPT_COOKIEFILE, 'cookie.txt');
curl_setopt($ch, CURLOPT_COOKIEJAR, 'cookie.txt');

$result = curl_exec($ch);

curl_close($ch);

// Look to see if there's a location header.
if ( ! empty($result) )
  if ( preg_match('/Location: (.+)/i', $result, $matches) )
  {
    // $matches[1] will contain the URL.
    // Perform another cURL request here to retrieve the content.
  }
3 голосов
/ 15 июня 2011

и вам тоже нужно это сделать: для доступа к страницам с использованием протоколов https необходимо изменить CURLOPT_SSL_VERIFYPEER на false.

попробуйте это:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...