Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/242.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将PHP cURL转换为JavaScript(连接到WCF服务)_Javascript_Php_Wcf_Curl - Fatal编程技术网

将PHP cURL转换为JavaScript(连接到WCF服务)

将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

我有一个必须连接的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 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没问题,很高兴为您修复了它!