在Dart中使用CORS发出HTTP POST请求时获取401

时间:2015-08-05 12:09:26

标签: dart easypost

我正在尝试在Dart中构建一个小型Web应用程序。该应用程序调用EasyPost Web服务,如此卷曲调用所示:

$ curl -X POST https://myuserid@api.easypost.com/v2/trackers
-d 'tracker[tracking_code]=EZ1000000001'
-d 'tracker[carrier]=FEDEX'

以下是我尝试匹配此请求的Dart代码:

// Configuration parameters
var url = "https://myuserid@api.easypost.com/v2/trackers";
var data = {
  'tracker[tracking_code]': '$packageNo',
  'tracker[carrier]': 'FEDEX'
 };

// Make the request
var request = new HttpRequest();
request
  ..open("POST", url, async: true)
  ..withCredentials = true
  ..onLoadEnd.listen((_) => print(request.responseText))
  ..send(data.toString());

当我在WebStorm中运行此代码时,代码在发出CORS错误时失败:

POST https://api.easypost.com/v2/trackers 401 (Unauthorized)
XMLHttpRequest cannot load https://api.easypost.com/v2/trackers.
No 'Access-Control-Allow-Origin' header is present on the requested
resource. Origin 'http://localhost:63342' is therefore not allowed
access. The response had HTTP status code 401.

这不应该自动处理吗?或者我是否需要自己将这些标题添加到请求中?

1 个答案:

答案 0 :(得分:0)

标头需要由服务器添加,否则客户端将不会发出请求。使用POST请求,浏览器会发出预检请求以检查CORS标头。如果服务器未添加它们,则浏览器不会发出实际的POST请求。

如果服务器没有添加这些标题,则可能不会以这种方式使用它。

有一些可能的解决方法:http://usamadar.com/2012/06/24/getting-around-browsers-same-origin-policy-sop-with-proxies-script-injection-jsonp-and-cors/