我正在使用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"..
请帮我解决这个问题。
由于
答案 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的网页