PHP-cURL - >遵循ruby重定向

时间:2012-04-25 15:39:18

标签: php ruby-on-rails ruby curl redmine

我正在尝试从我网站上的页面中提取wiki文档(redmine)。我成功检索到重定向到登录页面,发送用户名和密码字段,但随后我到达了一个带有来自redmine的红宝石重定向的页面,我无法继续前进。 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中做到这一点?

2 个答案:

答案 0 :(得分:1)

curl_setopt($curlHandle, CURLOPT_FOLLOWLOCATION, true);

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

答案 1 :(得分: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;
    ?>