2017-02-15 2 views
2

У меня есть следующая ситуация. 3 сайта Site A, Site B и Site C.Получение информации с сайта, которая берет данные с другого сайта

Site B вытягивать с завитком массивом из Site C так:

Site B файл data.php:

function get_curl_content_tx($url) { 
     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_HEADER, false); 
     $result = curl_exec($curl); 
     curl_close($curl); 
     return $result; 
} 
$url=get_curl_content_tx("http://Site_C_domain/ask/ID"); 

$total =json_decode($url,true); 

Где ID динамично ... Как это все нормально. Теперь я пытаюсь из Site A следующие

function get_curl_content_from_site_b($url) { 
     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_HEADER, false); 
     $result = curl_exec($curl); 
     curl_close($curl); 
     return $result; 
} 
$url=get_curl_content_tx("http://Site_B_domain/data.php"); 

$total =json_decode($url,true); 

var_dump($total); 

Так вопрос:

  1. ID который Site B тянет информация о том, должны прийти к сайту B с сайта А. Как?

Я также рад видеть, есть ли здесь другие решения. Основная часть - это сайт. Отправьте идентификатор на сайт B и сайт B, вытащите его с сайта C на сайт B и сайт B на сайт A ..

+0

Как вы думаете, это должно было быть как $ url = get_curl_content_tx («http: //Site_B_domain/data.php? ID = 12») ; –

+0

Да, должно быть так. Проблема в том, что делать в 'Site B'? Как получить этот идентификатор и отправить его на сайт «C» для получения информации? В настоящее время '$ url = get_curl_content_tx (" Site_B_domain/data.php? ID = 12 ");' return 'NULL', что нормально, потому что сайт B не знает, что делать с этим идентификатором? –

+0

привет, это то, что вы хотите, сайт A отправляет идентификатор на сайт B, сайт B затем отправляет этот идентификатор на сайт C, который затем возвращается в B, а затем в A? Или сайт отправляет идентификатор на сайт B, сайт B отправляет некоторый req для получения данных с сайта C .. Сайт B затем обрабатывает идентификатор с сайта A и данные с сайта B, а затем отправляет обратно на сайт A –

ответ

1

Пожалуйста, попробуйте этот код ..

a.php // URL a.php?ID = 123, принимает идентификатор в качестве параметра

<?php 
function get_curl_content_from_site_b($url) { 

    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $url, 
     CURLOPT_HEADER=> 0, 
     CURLOPT_RETURNTRANSFER=> 0, 
     CURLOPT_SSL_VERIFYPEER=> 0 
    )); 
    $resp = curl_exec($curl); 

     curl_close($curl); 
     return $resp; 
} 
$url=get_curl_content_from_site_b("http://localhost/so/b.php?id=".$_GET["id"]); 

?> 

b.php

<?php 
function get_curl_content_tx($url) { 
    $curl = curl_init(); 
    curl_setopt_array($curl, array(
     CURLOPT_RETURNTRANSFER => 1, 
     CURLOPT_URL => $url, 
     CURLOPT_HEADER=> 0, 
     CURLOPT_RETURNTRANSFER=> 0, 
     CURLOPT_SSL_VERIFYPEER=> 0 
    )); 
    $resp = curl_exec($curl); 

     curl_close($curl); 
     return $resp; 


} 
$url=get_curl_content_tx("http://localhost/so/c.php?id=".$_GET["id"]); 
?> 

c.php

<?php 
    print_r(array($_GET["id"],23));exit;   
?> 

c.php будет GE t значение id, которое распространяется через b, и ожидается, что оно вернет массив после некоторой обработки

0

Из-за форматирования URL-адресов моя лучшая догадка заключается в том, что возвращаемые данные разные. Кейн, мы получаем примеры того, что каждый вызов с завихрением получает взамен?

+0

он получает массив с данными для ID пользователя. Это действительно не важно сейчас. Основная проблема заключается в том, как отправить идентификатор с сайта «A» на «Сайт B», а затем на запрос «Site B» с сайта «C» и вернуть его на «Сайт A». –

1

Сайт B:

указан дополнительный заголовок ответа

header('X-Site-C-ID: 10'); 

сайт A:

прочитать заголовок ответа от сетевого узла B

$siteCId = null; 
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $line) use (&$siteCId) { 
    $headerName = 'X-Site-C-ID: '; 
    if (strpos($line, $headerName) !== false) { 
     $siteCId = trim($line, "$headerName\n"); 
    } 
    return strlen($line); 
}); 
$response = curl_exec($ch); 
var_dump($siteCId); 

======= ======= UPDATE

Как я вижу, что случай:

Вы Site B с URI site.b/getDataFromSiteC

код, который обрабатывает запрос путь getDataFromSiteC внешность как

function get_curl_content_tx($url) { 
     $curl = curl_init(); 
     curl_setopt($curl, CURLOPT_URL, $url); 
     curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 
     curl_setopt($curl, CURLOPT_HEADER, false); 
     $result = curl_exec($curl); 
     curl_close($curl); 
     return $result; 
} 

$id = 10; 
$url = get_curl_content_tx("http://site.c/ask/$id");  
$total = json_decode($url, true); 
// some actions with $total ... 

// set the additional header 
header("X-Site-C-ID: $id"); 

Теперь, если вы сделаете запрос на site.b/getDataFromSiteC в заголовках ответа будет дополнительный заголовок X-Site-C-ID: 10

Site A Вы с URI site.a/getDataFromSiteB с помощью следующего кода:

$siteCId = null; 
$ch = curl_init('site.b/getDataFromSiteB'); 
curl_setopt($ch, CURLOPT_HEADERFUNCTION, function ($ch, $line) use (&$siteCId) { 
    $headerName = 'X-Site-C-ID: '; 
    if (strpos($line, $headerName) !== false) { 
     $siteCId = trim($line, "$headerName\n"); 
    } 
    return strlen($line); 
}); 
$result = curl_exec($curl); 
curl_close($curl); 
if ($siteCId !== null) { 
    // you get Site C ID through Site B 
    echo $siteCId; 
} 
+0

Извините, я не понимаю, что это такое и где установить его 'header ('X-Site-C-ID: 10');'? А в 'читайте заголовок ответа с сайта B' это в моей функции curl? –

+0

1) Установить заголовок в том же месте, где вы делаете запрос на 'HTTP: // Site_C_domain/спросить/ID', как я понимаю, это' Сайт B' – cetver

+0

Да, это 'сайт B' но что это' X-Site-C-ID: нужно ли это изменить? –

Смежные вопросы