CURLOPT_FOLLOWLOCATION无法激活

时间:2011-06-15 04:14:48

标签: php curl

我有卷发的问题,我不知道如何解决它们。

这个想法是获取用户的用户名和密码,并将其发布到外部网页。

以下是代码:

$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 个答案:

答案 0 :(得分:7)

该错误表示您的PHP配置禁止您访问该位置。如果没有安装@mario建议的其他库,有几种方法可以解决这个问题。

  • 如果您拥有服务器或具有root访问权限,则可以更改php.ini文件以禁用“safe_mode”。
  • 您还可以在文档根目录中创建一个.htaccess文件,其中包含php_value safe_mode off
  • 您可以在PHP文件中添加ini_set('safe_mode', false);

如果以上都不起作用,你也可以按照以下方式做点什么:

$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.
  }

答案 1 :(得分:3)

也是,你需要这样做: 要使用https协议访问页面,您需要将CURLOPT_SSL_VERIFYPEER更改为false。

试试这个:

curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);