相当于curl命令的Javascript

时间:2013-08-27 18:07:02

标签: javascript curl

我使用下面的curl命令以json格式从远程服务器上托管的Druid集群中获取数据

curl -X POST "http://www.myserverIP.com:8080/druid/v2/" -H 'content-type: application/json' -d '{"queryType": "groupBy","dataSource": "twsample","granularity": "none","dimensions": ["created_at"],"aggregations": [{"type": "count", "name": "tweetcount"}],"intervals": ["2013-08-06T11:30:00.000Z/2020-08-07T11:40:00.000Z"]}'

但我无法创建一个等效的javascript方法,它将执行相同的操作,我使用下面的代码来执行此操作。

function sendCurlRequest(){
    var json_data = {
                "queryType": "groupBy",
                "dataSource": "twsample",
                "granularity": "none",
                "dimensions": ["created_at"],
                "aggregations": [
                    {"type": "count", "name": "tweetcount"}
                ],
              "intervals": ["2013-08-06T11:30:00.000Z/2020-08-07T11:40:00.000Z"]
            };
    $.ajax({
         cache : false,       
     type: 'POST',
     crossDomain:true,
     url: 'http://www.myserverIP:8080/druid/v2/',
     data:json_data,
     //dataType: "jsonp",
     contentType:"application/jsonp",
     success: function(data){
            alert(data);
        var pubResults = data;       
     },
     error: function(data){
       alert("ERROR RESPONSE FROM DRUID SERVER : "+JSON.stringify(data));
     },
     complete: function(data){
        console.log("call completed");
     }
   });
}

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:6)

cURL能够跨域发送和接收数据到远程服务器,但出于安全原因,javascript不是这种情况

我相信你的选择

1)使用CORS设置远程服务器上的标头以接受跨域调用(如果您有权访问服务器),thriqon也指出

2)使用来自服务器的jsonP格式响应(如果您可以控制响应的生成方式或者是否已经采用jsonP格式,则再次使用)

3)编写一个server-side proxy,作为您的呼叫和远程服务器之间的中介。然后,您可以格式化代理上的标头或响应,以使其能够响应跨域调用