如何使用http POST方法将参数传递给api

时间:2014-12-29 09:34:17

标签: angularjs html5

我正在使用HTTP POST方法发布参数,但它显示404错误。相同的API在命令行中正常工作

我的代码是:

var dataToPost = {url:'http://google.com'}; 

    $http.post("http://appfil.es" , dataToPost)

        .success(function(serverResponse, status, headers, config) {

        })
        .error(function(serverResponse, status, headers, config) {

        }
    );

上面的代码返回错误状态404 ..但下面的代码工作正常是控制台。

curl -X POST http://appfil.es --data "url=http://google.com"..

请帮我解决这个问题。

由于

3 个答案:

答案 0 :(得分:1)

您的代码是正确的。

但是,您无法通过客户端浏览器(XSS安全性)在网站上进行post调用

确保http://appfil.es与包含角度代码的网页的网址相同,或者更喜欢使用$http.jsonp

有关JSONP on Wikipedia的更多信息。

只要他们不从API发送以下标头,您就无法缩短appfil.es的网址

Access-Control-Allow-Origin

的确,如果您通过在命令中添加选项appfil.es来打印-v返回的标题,则只能看到:

< HTTP/1.1 201 Created
* Server nginx/1.4.4 is not blacklisted
< Server: nginx/1.4.4
< Date: Mon, 29 Dec 2014 10:52:21 GMT
< Content-Type: text/html;charset=utf-8
< Content-Length: 23
< Connection: keep-alive
< Location: http://appfil.es/YVcCEA

因此,没有Access-Control-Allow-Origin。您可以从您的网站(服务器端)调用他们的API,而不是客户端(浏览器)。

答案 1 :(得分:0)

由于您使用的是AngularJs,您可以使用此转换器对数据进行编码,这将集中所有请求的编码:

(function () {
    'use strict';
    // Module name is handy for logging
    var id = 'app';
    // Create the module and define its dependencies.
    var app = angular.module('app', [
    ]);
    app.config(['$httpProvider', function ($httpProvider) {
        // Use x-www-form-urlencoded Content-Type
        $httpProvider.defaults.headers.post['Content-Type'] = 'application/x-www-form-urlencoded;charset=utf-8';
        // Override $http service's default transformRequest
        $httpProvider.defaults.transformRequest = [function (data) {
            /**
             * The workhorse; converts an object to x-www-form-urlencoded serialization.
             * @param {Object} obj
             * @return {String}
             */
            var param = function (obj) {
                var query = '';
                var name, value, fullSubName, subName, subValue, innerObj, i;
                for (name in obj) {
                    value = obj[name];
                    if (value instanceof Array) {
                        for (i = 0; i < value.length; ++i) {
                            subValue = value[i];
                            fullSubName = name + '[' + i + ']';
                            innerObj = {};
                            innerObj[fullSubName] = subValue;
                            query += param(innerObj) + '&';
                        }
                    }
                    else if (value instanceof Object) {
                        for (subName in value) {
                            subValue = value[subName];
                            fullSubName = name + '[' + subName + ']';
                            innerObj = {};
                            innerObj[fullSubName] = subValue;
                            query += param(innerObj) + '&';
                        }
                    }
                    else if (value !== undefined && value !== null) {
                        query += encodeURIComponent(name) + '=' + encodeURIComponent(value) + '&';
                    }
                }
                return query.length ? query.substr(0, query.length - 1) : query;
            };
            return angular.isObject(data) && String(data) !== '[object File]' ? param(data) : data;
        }];
    }]);

})();

答案 2 :(得分:-1)

通过PHP在JavaScript变量中传递cURL请求。

    var dataToPost = <?php
    $ch = curl_init("http://www.google.com");
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    $result=curl_exec($ch);
    echo $result;
    curl_close($ch);
    ?>

文件撰写(dataToPost);将为您提供Google.com的网页