如何使用PHP转发/重定向HTTP PUT请求?

时间:2010-05-08 00:57:24

标签: php http redirect httprequest

我在服务器上收到HTTP PUT请求,我想将这些请求重定向/转发到其他服务器。

我在PHP服务器上处理PUT请求。

PUT请求正在使用基本的HTTP身份验证。

以下是一个例子:

www.myserver.com/service/put/myfile.xml

重定向到

www.myotherserver.com/service/put/myfile.xml

如何在不保存第一台服务器上的文件并使用CURL重新发送PUT请求的情况下执行此操作?

谢谢!

2 个答案:

答案 0 :(得分:5)

HTTP / 1.1定义了此类重定向的状态代码307。但是,PUT通常由客户端软件使用,你几乎可以假设没有人荣誉307。

最有效的方法是在Apache上设置代理,将请求重定向到新的URL。

这是你在PHP中代理它的方式,

$data = file_get_contents('php://input');
$mem  = fopen('php://memory'); 
fwrite($mem, $data); 
rewind($mem);   
$ch = curl_init($new_url);                             
curl_setopt($ch, CURLOPT_PUT, true);  
curl_setopt($ch, CURLOPT_INFILE, $mem); 
curl_setopt($ch, CURLOPT_INFILESIZE, strlen($data)); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);    
curl_exec($ch);       
curl_close($ch);  
fclose($meme);

答案 1 :(得分:2)

不可能。重定向是隐式的GET请求。您需要使用curl播放代理。

从技术上讲,保存在磁盘上也没有必要,您可以直接将响应主体直接传递给Curl的请求主体。但是因为我从来没有在PHP中做过这些(在Java中它是一块蛋糕),我无法给出更详细的答案。