2015-05-13 2 views
2

У меня есть HTML-страница, которая должна вызывать PHP в другом домене. Правило «Same-Origin-Rule» большинства браузеров запрещает этот вызов. Поэтому я хочу вызвать PHP в своем домене, чтобы вызвать PHP в целевом домене. Я хочу, чтобы избежать Curl, так что я решил использовать fopen в этом сквозной PHP с использованием $context:Позвоните в PHP из другого PHP (без cURL)

$params = array('http' => array('method'=>'POST', 
           'header'=>'Content-type: application/json', 
           'content'=>json_encode($_POST))); 
$ctx = stream_context_create($params); 
$fp = fopen('https://other_domain.com/test.php', 'rb', false, $ctx); 
$response = stream_get_contents($fp); 
echo $response; 

Но входящий $_POST в test.php кажется пустыми. Есть идеи?

+0

Где test.php? – harrrrrrry

ответ

0

мне удалось это так:

$postData = file_get_contents('php://input'); 
$params = array('http' => array('method'=>'POST', 
           'header'=>'Content-type: application/x-www-form-urlencoded', 
           'content'=>$postData)); 
$ctx = stream_context_create($params); 
$url = 'https://other_domain.com/test.php'; 
$fp = fopen($url, 'rb', false, $ctx); 
$response = stream_get_contents($fp); 
echo $response; 

Это легко вручает корыта все входящие данные POST, а также пересылает любые ответы. Спасибо за все ваши сообщения!

2

Попытка построить Params с http_build_query()

$postdata = http_build_query(
    array(
     'json' => json_encode($_POST), 
    ) 
); 

, а затем

$params = array('http' => array('method'=>'POST', 
          'header'=>'Content-type: application/x-www-form-urlencoded', 
          'content'=> $postdata)); 

На другом сайте получить через $_POST['json']

0

Если у вас есть сервер, который поддерживает application/json как POST, ваш код не будет работать: серверы HTTP ожидают, что данные POST всегда будут одним из application/x-www-form-encoded или multipart/form-data. Вам необходимо переписать код для отправки данных POST в один из поддерживаемых типов.

+0

Не уверен, что у вас есть свои факты прямо там. Fred –

+0

@DavidBarker. Как я уже сказал, _unless у вас есть сервер, который поддерживает 'application/json'_, потому что штоковые HTTP-серверы обычно поддерживают только два стандартных типа данных. См. Например, комментарии в [Тип содержимого формы для json HTTP POST?] (Http://stackoverflow.com/questions/4249609/form-content-type-for-a-json-http-post) Я не знает о любых HTTP-серверах, которые в настоящее время поддерживают 'application/json' в качестве типа содержимого _out поля box_. –

+0

Сервер не проблема, вы говорите, это правда, если вы отправляете из HTML-форм. Потоки PHP очень разные. –