Как перенаправить/перенаправить 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?
Спасибо!
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);
Невозможно. Перенаправление неявно является запросом GET
. Вам нужно будет играть за прокси-сервер, используя curl
.
Сохранение на диске технически также не требуется, вы можете просто передать тело ответа непосредственно в тело запроса Curl. Но так как я никогда не делал этого на PHP (в Java это проще простого), я не могу дать более подробный ответ на этот счет.