Как перенаправить/перенаправить HTTP-запрос PUT с помощью PHP?


Я получаю HTTP-запросы PUT на сервере, и я хотел бы перенаправить/переслать эти запросы на другой сервер.

Я обрабатываю запрос PUT на обоих серверах с помощью PHP.

Запрос PUT использует базовую аутентификацию HTTP.

Вот пример:

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

Перенаправление на

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

Как я могу это сделать без сохранения файла на моем первом сервере и повторной отправки запроса PUT с помощью CURL?

Спасибо!

Author: benjisail, 2010-05-08

2 answers

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);
 5
Author: ZZ Coder, 2010-05-08 02:25:19

Невозможно. Перенаправление неявно является запросом GET. Вам нужно будет играть за прокси-сервер, используя curl.

Сохранение на диске технически также не требуется, вы можете просто передать тело ответа непосредственно в тело запроса Curl. Но так как я никогда не делал этого на PHP (в Java это проще простого), я не могу дать более подробный ответ на этот счет.

 2
Author: BalusC, 2010-05-08 01:01:45