2014-11-06 2 views
0

연결해야하는 WCF API가 있습니다. 나는 정말 그 코드에 액세스 할 수없는, 그러나 이것은 작동합니다PHP cURL을 JavaScript로 변환 (WCF 서비스에 연결)

$user = "login"; 

$password = "pwdstr"; 
$service_credentials = "external_api_user:sometext"; 

$arg = $user.'|'.sha1($user."somestr".$password); 
$url='https://mysteryUrl.svc/projectsapi/' . $arg; 

// Get cURL resource   
$curl = curl_init(); 
// Set some options - we are passing in a useragent too here   
curl_setopt_array($curl, array(
    CURLOPT_RETURNTRANSFER => 1, 
    CURLOPT_URL => $url, 
    CURLOPT_USERAGENT => 'Codular Sample cURL Request', 
    CURLOPT_HTTPHEADER => array("Authorization: " . base64_encode("Basic " + service_credentials)))); 
// Send the request & save response to $resp   
$resp = curl_exec($curl); 
// Close request to clear up some resources   
curl_close($curl); 
echo $resp; 

내가 동일한 API에서 데이터를 얻을 내 웹 페이지를하고 싶습니다. 지금까지이 문제를 해결하기 위해 노력해 왔습니다.

function requestFromApi() { 
    var user = "login"; 
    var password = "pwdstr"; 
    var service_credentials = "external_api_user:sometext"; 
    var arg = user + '|' + sha1(user + "somestr" + password); 
    var url = 'https://mysteryUrl.svc/projectsapi/' + arg; 

    $.ajax({ 
     url: url, 
     beforeSend: function(xhr) { 
     xhr.setRequestHeader("Authorization", base64_encode("Basic " + service_credentials)); 
     xhr.setRequestHeader("User-Agent",'Codular Sample cURL Request'); 
     }, 
     type: 'GET', 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (data) { 
     alert(JSON.stringify(data)); 
     }, 
     error: function(){ 
     alert("Cannot get data"); 
     } 
     }); 
}; 

물론 작동하지 않습니다. 임 전적으로 웹 개발에 새로운, 그래서 어떤 도움을 크게 주시면 감사하겠습니다.

크롬 콘솔이 발생, 페이지로드 할 때 : 나는 헤더를 설정하는 방법

Refused to set unsafe header "User-Agent" 
XMLHttpRequest cannot load http s://verylongUrlAsInTheCodeAbove. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. The response had HTTP status code 400. 

를? 적어도 하나의 문제가 다른 도메인에 액세스하려고 시도하는 것 같습니다. 어떻게 그렇게 할 수 있습니까?

JavaScript를 사용하여이 API에 액세스하는 다른 방법이 있습니까? 기본적으로 내 데이터 작업을 다시 보낼 바보 같은 PHP 'API'를 만들 수 있습니까? 명언을 열어 라. 미리 감사드립니다!

편집

: 나는 JSONP 사용 :

<head> 

    <script type="text/javascript" src="js/jquery-2.1.1.js"></script> 
    <script type="text/javascript" src="js/jquery.mobile-1.4.5/jquery.mobile-1.4.5.js"></script> 
    <script type="text/javascript" src="js/functions.js"></script> 

    <script> 
    alert('1'); 
     $(document).ready(function requestFromApi() { 
     var user = "login"; 
     var password = "pwdstr"; 
     var service_credentials = "external_api_user:sometext"; 
     var arg = user + '|' + sha1(user + "somestr" + password); 
     var url='https://mysteryUrl.svc/projectsapi/' + arg; 

     $.ajax({ 
     url: url+"?callback=?", 
     beforeSend: function(xhr) { 
      xhr.setRequestHeader("Authorization", base64_encode("Basic " + service_credentials)); 
      xhr.setRequestHeader("User-Agent",'Codular Sample cURL Request'); 
      }, 
     type: 'GET', 
     dataType: 'json', 
     contentType: 'application/json', 
     success: function (dataWeGotViaJsonp) { 
      alert(dataWeGotViaJsonp); 
     }, 
     error: function(){ 
      alert("Cannot get data"); 
     } 
     }); 

     }); 
     alert('2'); 
    </script> 

</head> 

을 그리고 지금은 잘못된 요청 오류가 발생합니다. 그래서 오류가 어디에 있을까요?

답변

1

현재 경로가 올바르지 않습니다. WPF 서버에 CORS 헤더가 사용 설정되어 있지 않으므로 오류가 발생합니다. CORS 헤더는 현재 도메인 isn이 아닌 경우 웹 브라우저에 웹 브라우저에 서버에 연결할 수 있음을 알려줍니다. 브라우저가 연결을 거부했습니다.

WPF에서 CORS를 활성화하는 방법에 대한 예제는 http://enable-cors.org/server_wcf.html입니다.

+0

감사합니다 :) JSONP를 사용하고 어딘가에 도착했습니다. 이제는 잘못된 요청 오류가 발생하지만 적어도 뭔가를 보내고 뭔가를 얻는 것을 의미합니다. 내 시작 메시지 편집에 더 많은 코드가 있습니다! –

+0

또한, 내 PHP는 wcf가 아닌 다른 도메인에 있으므로 wcf 쪽을 변경해야 할 필요가 없어야한다고 생각합니다. 내가 맞습니까? –

+0

그래, WCF 서비스는 내가 할 수 없었던 변화를 필요로했다. 그러나 운 좋게도 동료는 그것을했다. 그리고 지금 그것 모두는 작동한다. 내가 cors 헤더 였는지 확실하지 않지만, 일반적인 방향으로 나를 보내 주셔서 감사합니다! –

관련 문제