2011-08-13 5 views
0

私は、サイトポリシーを管理していないときにクロスドメインアクセスを行う唯一の方法であると言われているので、PHPプロキシを使用してJSONにアクセスしようとしています。PHPプロキシサーバとJSONの呼び出し?

function curl_download($Url){ 

    // is cURL installed yet? 
    if (!function_exists('curl_init')){ 
     die('Sorry cURL is not installed!'); 
    } 

    // OK cool - then let's create a new cURL resource handle 
    $ch = curl_init(); 

    // Now set some options (most are optional) 

    // Set URL to download 
    curl_setopt($ch, CURLOPT_URL, $Url); 

    // Set a referer 
    curl_setopt($ch, CURLOPT_REFERER, "http://www.example.org/yay.htm"); 

    // User agent 
    curl_setopt($ch, CURLOPT_USERAGENT, "MozillaXYZ/1.0"); 

    // Include header in result? (0 = yes, 1 = no) 
    curl_setopt($ch, CURLOPT_HEADER, 0); 

    // Should cURL return or print out the data? (true = return, false = print) 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 

    // Timeout in seconds 
    curl_setopt($ch, CURLOPT_TIMEOUT, 10); 

    // Download the given URL, and return output 
    $output = curl_exec($ch); 

    // Close the cURL resource, and free system resources 
    curl_close($ch); 

    return $output; 
} 

問題は、私が起こるようですhttp://www.nfl.com/liveupdate/scorestrip/ss.json何も$のURLを交換するときである:私は仲間のstackoverflowのユーザーが共有するようPHPのプロキシとして使用しようとしています下のここ

はコードです。私は本当にこのタイプのことをやっていないので、このPHPプロキシをどのように使うべきかはわかりません。

私はこれを別々のPHPファイルに作成し、このコードにリクエストを送信するとしますか?私は上のサイトからjsonにアクセスできるように、これを行うためにここで正確に何をするのかについて、壁にぴったりです。

答えて

1

私はこれを別々のPHPファイルに作成し、このコードにリクエストを送信するとしますか?

はい。上記のコードは、JSからのリクエストを別のドメインのリモートサービスに再送信する必要があります。トリックはJSからのクロスドメインPOSTリクエストを可能にします。

<?php 

$server_url = "http://example.com/"; 

$options = array 
(
    CURLOPT_HEADER   => true, 
    CURLOPT_RETURNTRANSFER => true, 
    CURLOPT_FOLLOWLOCATION => true, 
    CURLOPT_TIMEOUT  => 60, 
    CURLOPT_CONNECTTIMEOUT => 0, 
    CURLOPT_HTTPGET  => 1 
); 

$service = $_GET["service"]; 

$request_headers = Array(); 
foreach($_SERVER as $i=>$val) { 
     if (strpos($i, 'HTTP_') === 0) { 
       $name = str_replace(array('HTTP_', '_'), array('', '-'), $i); 
       if ($name != 'HOST') 
       { 
        $request_headers[] = "{$name}: {$val}"; 
       } 
     } 
} 

$options[CURLOPT_HTTPHEADER] = $request_headers; 

switch (strtolower($_SERVER["REQUEST_METHOD"])) 
{ 

    case "post": 
     $options[CURLOPT_POST] = true; 
     $url = "{$server_url}/services/".$service; 

     $options[CURLOPT_POSTFIELDS] = file_get_contents("php://input"); 

     break; 
    case "get": 

     unset($_GET["service"]); 

     $querystring = ""; 
     $first = true; 
     foreach ($_GET as $key => $val) 
     { 
      if (!$first) $querystring .= "&"; 
      $querystring .= $key."=".$val; 
      $first = false; 
     } 

     $url = "{$server_url}/services/".$service."?".$querystring; 

     break; 
    default: 
     throw new Exception("Unsupported request method."); 
     break; 

} 

$options[CURLOPT_URL] = $url; 

$curl_handle = curl_init(); 

curl_setopt_array($curl_handle,$options); 
$server_output = curl_exec($curl_handle); 
curl_close($curl_handle); 

$response = explode("\r\n\r\n",$server_output); 
$headers = explode("\r\n",$response[0]); 

foreach ($headers as $header) 
{ 
    if (!preg_match(';^transfer-encoding:;ui', Trim($header)) ) 
    { 
     header($header); 
    } 
} 

echo $response[1]; 

これは私が使用するスクリプトのわずかに変更されたバージョンですが、残念なことによく書かれていません。

希望します。

+0

を使用することをお勧めします。警告:ヘッダー情報を変更することはできません - すでにによって送られたヘッダ(出力はCで開始:\のinetpub \バーチャルホスト\ allencoded。 C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.phpの88行目警告:ヘッダー情報を変更できません - 既に送信されたヘッダー(C:\ inetpub \ C:\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.phpの88行目警告:ヘッダー情報を変更できません - 既に送信されたヘッダー(Cで出力が開始されました) :\ inetpub \ vhosts \ allencoded.com \ httpdocs \ test.php:12)in – allencoded

関連する問題