Перевести PHP cURL в JavaScript (подключиться к службе WCF)

У меня есть API 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");
}
});
};

Что, конечно, не работает. Я совершенно новичок в веб-разработке, поэтому любая помощь будет принята с благодарностью.

Chrome консоль выдает это при загрузке страницы:

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.

Как я могу установить заголовок?
Мне кажется, что по крайней мере одна из проблем заключается в попытке получить доступ к другому домену, так как я могу это сделать?

Есть ли другой способ получить доступ к этому API с помощью JavaScript? Может ли сделать тупой 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>

И теперь я получаю ошибку Bad Request. Так где ошибка может быть?

0

Решение

Вы на правильном пути, ошибка, которую вы получаете, потому что ваш сервер WPF не имеет CORS Заголовки включены, заголовки CORS сообщают веб-браузерам, каким доменам разрешено подключаться к серверу, если текущий домен не разрешен, браузер отказывает в подключении.

Пример того, как включить CORS в WPF: http://enable-cors.org/server_wcf.html.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]