Суть такая: у меня есть мобильное приложение, которое отправляет запросы на основной сервер и получает оттуда ответы.
Я хочу отправлять запросы не напрямую, а через еще один дополнительный сервер.
На дополнительном сервере написала скрипт:
<?php
$curl = curl_init();
$url = substr($_SERVER['REQUEST_URI'], 1);
curl_setopt($curl, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_HEADER, 1);
curl_setopt($curl, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl, CURLOPT_HTTPHEADER, getallheaders());
if($_SERVER['REQUEST_METHOD'] == 'POST'){
curl_setopt($curl, CURLOPT_POST, 1);
curl_setopt($curl, CURLOPT_POSTFIELDS, $_POST);
}
$res = curl_exec($curl);
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$headers = substr($res, 0, $header_size);
$body = substr($res, $header_size);
$out = fopen('php://output', 'w');
fputs($out, $headers . PHP_EOL . PHP_EOL . $body);
fclose($out);
curl_close($curl);
die;
Но в таком случае при отправке ответа приложению, мой дополнительный сервер отправлял свои какие-то заголовки, а то что я кидала в php://output всё считал как тело запроса. Вот так:
Я попробовала сделать так:
...
$header_size = curl_getinfo($curl, CURLINFO_HEADER_SIZE);
$headers = substr($res, 0, $header_size);
$body = substr($res, $header_size);
$headers = explode(PHP_EOL, trim($headers));
foreach ($headers as $header) {
header($header);
}
$out = fopen('php://output', 'w');
fputs($out, $body);
fclose($out);
...
Но так вообще не работает. Пишет, что сервер неожиданно разорвал соединение.
Как реализовать, то, что мне надо?