我正在尝试发送带有表单数据的POST请求。
在.save(data)
上使用$resource('http://localhost:5000/api/auth');
- 对象会发送以下相应的cURL字符串(使用Chrome提取):
curl 'http://localhost:5000/api/auth' -H 'Pragma: no-cache' -H 'Origin: http://localhost:63342' -H 'Accept-Encoding: gzip, deflate' -H 'Accept-Language: da-DK,da;q=0.8,en-US;q=0.6,en;q=0.4' -H 'User-Agent: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2490.80 Safari/537.36' -H 'Content-Type: application/json;charset=UTF-8' -H 'Accept: application/json, text/plain, */*' -H 'Cache-Control: no-cache' -H 'Referer: http://localhost:63342/public_html/app/index.html' -H 'Connection: keep-alive' -H 'X-FirePHP-Version: 0.0.6' --data-binary '{"username":"admin","password":"mypass"}' --compressed
我的API 不获取任何表单数据。但是,当我使用curl -X POST --data "username=engel&password=mypass" http://localhost:5000/api/auth
时,我的API会返回200 SUCCESS
。
如何使用$resource
发布与工作相似的请求?
API允许回复Access-Control-Allow-Origin
http://localhost:63342。
修改 我使用以下工厂:
factory('AuthResource', ['$resource', function($resource) {
return $resource('http://localhost:5000/api/auth');
}]);
然后我用
调用它var login = AuthResource.save(user);
其中,用户是包含username
和password
答案 0 :(得分:0)
您正在使用$resource
服务发送标准POST请求。这意味着它会将username
和password
作为JSON对象发送到请求正文中。
您执行的CURL请求将数据作为url编码的表单数据发送。这也是您期望的API。
如果您想以角度方式执行相同操作,则必须告知$resource
也将其作为表单数据发送。
只需在$resource
服务中添加新方法即可更新工厂:
factory('AuthResource', ['$resource', function($resource) {
return $resource(
'http://localhost:5000/api/auth',
{},
{
login: {
method: 'POST',
headers: {
'Content-type': 'application/x-www-form-urlencoded'
}
tranformRequest: function (data, headersGetter) {
var str = [];
for (var d in data) {
str.push(encodeURIComponent(d) + "=" + encodeURIComponent(data[d]));
}
return str.join("&");
}
}
}
);
}]);
此自定义方法会发送正确的标头,但也会将带有凭据的JSON对象转换为url编码的字符串。
然后,您可以使用此新方法对您的api进行身份验证:
var login = AuthResource.login(user);