2013-04-05 4 views
1

JSON 데이터를 URL 문자열 (외부 도메인)에 게시하고 액세스 제어를 우회하려면 어떻게해야합니까? 여기 JSON 데이터를 외부 URL에 게시하십시오.

가 JQuery와이 때문에 외부 URL로 전송 작동하지 않습니다 요청 게시 아약스이다 액세스 제어를-원점 허용 :

var json = JSON.stringify(object); 

$.ajax({ 
    type: 'POST', 
    url: externalurl, 
    data: json, 
    dataType: 'json', 
    success: function(data){console.log(data);}, 
    failure: function(errMsg) { 
     console.log(errMsg); 
    }, 
}); 

나는에 데이터를 게시하는 제안을받은 동일한 도메인과 '요청을'외부 도메인에 전달하십시오. 그러나이 솔루션은 저에게 의미가 없습니다. 가장 안전한 솔루션을 찾고 있습니다. 어떤 도움이라도 대단히 감사 할 것입니다.

+0

JSON-P를 사용해 보셨습니까? jQuery를 사용하면 'jsonp'대신 'json'대신 데이터 유형을 사용할 수 있지만 100 % 확신 할 수는 없습니다. –

+1

'요청시 통과'솔루션은 이해가되지 않습니다. 당신은 당신이 그것을 이해하지 못하고 설명을 원하거나 당신이 그것을 이해하지만 당신의 현재 상황에 적절하지 않다고 간단히 의미합니까? @ MarkOrmston - JSONP를 사용하면 도메인 문제를 해결할 수 있지만 외부 도메인이이를 처리하고 적절한 resposne을 제공하도록 설정 한 경우에만 작동합니다. – nnnnnn

+0

예,이 경우에는 적합하지 않습니다. 데이터는 json으로 보내야합니다. 또한 외부 서버를 제어 할 수 없기 때문에 CORS도 가능한 해결책이 아닙니다. – jverban

답변

2

한 가지 방법은 동일 출처 정책은 실제 전송을 할 컬을 사용하는 것입니다 우회 할 수 있습니다.

PHP를 사용하여 예제를 제공 하겠지만 모든 서버 측 언어에서이 작업을 쉽게 수행 할 수 있습니다.

<?php 
    // Initialize curl 
    $curl = curl_init(); 

    // Configure curl options 
    $opts = array(
     CURLOPT_URL    => $externalscriptaddress, 
     CURLOPT_RETURNTRANSFER => true, 
     CURLOPT_CUSTOMREQUEST => 'POST', 
     CURLOPT_POST   => 1, 
     CURLOPT_POSTFIELDS  => 'field1=arg1&field2=arg2' 
    ); 

    // Set curl options 
    curl_setopt_array($curl, $opts); 

    // Get the results 
    $result = curl_exec($curl); 

    // Close resource 
    curl_close($curl); 

    echo $result; 
?> 
:

var json = JSON.stringify(object); 

$.ajax({ 
    type: 'POST', 
    url: send.php, 
    data: json, 
    dataType: 'json', 
    success: function(data){console.log(data);}, 
    failure: function(errMsg) { 
     console.log(errMsg); 
    }, 
}); 

이 그런 다음 PHP 스크립트가 그것을 전달하는 당신이 send.php하기 위해 아약스를 가리 킵니다

먼저 send.php 예를 들어, 서버에 스크립트를 설정

+0

솔루션을 제공해 주셔서 감사합니다. 이것은 트릭을 완료했습니다! – jverban

+0

도움이되기를 기쁘게 생각합니다. 솔루션에 만족한다면 나중에 다른 사람들이 볼 수있는 답으로 표시해주세요. –

+0

답변을 수락하려면 upvote 옆에있는 틱을 클릭하면 대답이 올바른 답으로 표시되며 첫 번째 질문이 대답으로 표시된 경우 약간의 평판을 얻습니다. –

3

저는 PHP에서 그리 오래 전 않았습니다. 다음은 "요청 전달"의 예입니다. (당신은 대부분의 설치 꽤 표준 PHP 컬을 활성화해야합니다.)

<?php 
    //Get the JSON data POSTed to the page 
    $request = file_get_contents('php://input'); 

    //Send the JSON data to the right server 
    $ch = curl_init(); 
    curl_setopt($ch, CURLOPT_URL, "http://location_of_server.com/"); 
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 
    curl_setopt($ch, CURLOPT_POST, 1); 
    curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json; charset=utf-8")); 
    curl_setopt($ch, CURLOPT_POSTFIELDS, $request); 
    $data = curl_exec($ch); 
    curl_close($ch); 

    //Send the response back to the Javascript code 
    echo $data; 
?> 
+0

+1보다 더 빨리 : D –

+0

대단히 감사합니다. – jverban

관련 문제