将PHP cURL转换为JavaScript(连接到WCF服务)
我有一个必须连接的WCF API。我没有访问它的代码的权限,但这是可行的:将PHP cURL转换为JavaScript(连接到WCF服务),javascript,php,wcf,curl,Javascript,Php,Wcf,Curl,我有一个必须连接的WCF API。我没有访问它的代码的权限,但这是可行的: $user = "login"; $password = "pwdstr"; $service_credentials = "external_api_user:sometext"; $arg = $user.'|'.sha1($user."somestr".$password); $url='https://mysteryUrl.svc/projectsapi/' . $arg; // Get cURL reso
$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.
如何设置标题?
在我看来,至少有一个问题是试图访问另一个域,那么我该怎么做呢
是否有其他方法可以使用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”);
$(文档).ready(函数requestFromApi(){
var user=“login”;
var password=“pwdstr”;
var service\u credentials=“外部api\u用户:sometext”;
var arg=user+“|”+sha1(user+“somestr”+密码);
var url='1〕https://mysteryUrl.svc/projectsapi/'+arg;
$.ajax({
url:url+“?回调=?”,
beforeSend:function(xhr){
setRequestHeader(“授权”,base64_编码(“基本”+服务_凭证));
setRequestHeader(“用户代理”,“Codular示例cURL请求”);
},
键入:“GET”,
数据类型:“json”,
contentType:'应用程序/json',
成功:函数(dataWeGotViaJsonp){
警报(dataWeGotViaJsonp);
},
错误:函数(){
警报(“无法获取数据”);
}
});
});
警报(“2”);
现在我得到了错误的请求错误。那么错误可能在哪里呢?您的路径很好,您得到的错误是因为您的WPF服务器没有启用头,CORS头告诉WebBrowser允许哪些域连接到服务器,如果不允许当前域,则浏览器拒绝连接
例如,关于如何在WPF上启用CORS的示例:。谢谢:)我使用了JSONP,现在我得到了一个错误的请求,但这至少意味着我发送了一些东西并返回了一些东西。更多的代码在我的开始消息编辑!另外,我的php与wcf位于不同的域中,所以我认为不需要更改任何wcf方面的内容。我说的对吗?是的,所以WCF服务需要更改,我无法更改,但幸运的是一位同事做了更改,现在一切都正常了。我不确定这是不是cors的头球,但谢谢你让我在一般的方向@prawdziwy sok没问题,很高兴为您修复了它!