0

我正在尝试从我的网站(redmine)上的页面中提取 wiki 文档。我成功检索到登录页面的重定向,发送帖子用户名和密码字段,但随后我到达一个带有来自 redmine 的 ruby​​ 重定向的页面,我无法更进一步。redmine的“response.rb”文件中的ruby代码是:

def redirect(url, status)
  self.status = status
  self.location = url.gsub(/[\r\n]/, '')
  self.body = "<html><body>You are being <a href=\"#{CGI.escapeHTML(url)}\">redirected</a>.</body></html>"
end

我对 ruby​​ 的了解不足以修改 redmine 的代码,那么有没有办法在 php 中做到这一点?

4

2 回答 2

1

curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true);

会告诉 cURL 遵循任何正确配置的重定向(任何发送 Location: 标头的东西)。

于 2012-04-26T15:20:18.047 回答
0

找到了替代解决方案!

如果其他人对 redmine 或任何其他重定向有此问题:

  1. 首先使用 cURL 登录
  2. 将会话保存到 cookie
  3. 使用 cURL 获取需要身份验证的安全页面。

    <?php
        $tempFilename = tempnam("/tmp", "COOKIE");
    
        // Login
        $curlHandle = curl_init("http://bob.com/login");
    
        curl_setopt($curlHandle, CURLOPT_COOKIEJAR, $tempFilename);
        curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
    
        $dataArray = array(
             "username" => "bob",
             "password" => "password"
        );
    
        curl_setopt($curlHandle, CURLOPT_POSTFIELDS, $dataArray);
    
        $output = curl_exec($curlHandle);
    
        // Getting the wiki
        $curlHandle = curl_init("http://bob.com/wiki");
    
        curl_setopt($curlHandle, CURLOPT_COOKIEFILE, $tempFilename);
        curl_setopt($curlHandle, CURLOPT_RETURNTRANSFER, true);
    
        $output = curl_exec($curlHandle);
        echo $output;
    ?>
    
于 2012-04-26T14:55:44.440 回答