在Ionic 2中进行HTTP POST调用会给出禁止响应

时间:2016-11-30 11:12:39

标签: android cordova ionic-framework ionic2 cordova-plugins

我只想在我的IONIC 2项目中进行http post调用。当我运行离子服务时,它运行正常。但当我运行离子运行anroid 在我的设备上运行它时,它会给我403(禁止)响应。

这是我的PaymentService.ts,其中已经进行了http调用

import {Http, Headers, RequestOptions} from '@angular/http';
import 'rxjs/add/operator/map';
import { Injectable } from '@angular/core';

@Injectable()
export class PaymentService {
static get parameters() {
    return [[Http]];
}

constructor(private http:Http) {}

postToPaymentApi(data) {
    let headers: Headers = new Headers()
    headers.set('Content-type', 'application/x-www-form-urlencoded')
    let options = new RequestOptions({headers: headers})

    var response = this.http.post("http://test/url",data,options).map(res => res.json());
    return response;
   }
 }
}

为了克服这个问题,我尝试了几件事,比如

  1. 运行 cordova插件添加cordova-plugin-whitelist
  2. 在我的config.xml <meta http-equiv="Content-Security-Policy" content="default-src *; img-src *; style-src 'self' 'unsafe-inline'; script-src 'self' 'unsafe-inline' 'unsafe-eval'">
  3. 中添加了这一行
  4. 关注此链接 - &gt; https://github.com/apache/cordova-plugin-whitelist<access origin>添加为具有指定属性的*,<allow-navigation><allow-intent>标记。
  5. 尝试添加此处http://blog.ionic.io/handling-cors-issues-in-ionic/
  6. 中提到的proxyUrl

    但在我的情况下,没有上述解决方案正在发挥作用。

    当我从我的Android设备点击后调用时,我收到以下错误响应:

    {"_body":"",
    "status":403,
    "ok":false,
    "statusText":"Forbidden",
    "headers":{"Date":["Wed","30 Nov 2016 09:28:53 GMT"],
    "Content-Length":["0"]},
    "type":2,
    "url":"http://test/url"}
    

    我有以下离子信息:

    Cordova CLI: 6.4.0 
    Ionic Framework Version: 2.0.0-rc.3
    Ionic CLI Version: 2.1.12
    Ionic App Lib Version: 2.1.7
    Ionic App Scripts Version: 0.0.45
    ios-deploy version: Not installed
    ios-sim version: Not installed
    OS: Linux 4.4
    Node Version: v7.2.0
    Xcode version: Not installed
    

    有解决方案的人吗?

    提前致谢。

2 个答案:

答案 0 :(得分:0)

你能试试这个例子吗?您确定要发送正确的标题吗

postToPaymentApi(data) {
   let headers = new Headers({ 'Content-Type': 'application/x-www-form-urlencoded' });

   return new Promise(resolve => {
      this.http.post('http://test/url',data, {headers: headers })
         .subscribe(respond => {
           console.log(respond);       
         });   
   });        
}

答案 1 :(得分:0)

我在这里遇到同样的错误,我发现这是因为当您运行离子服务时,请求来源以&#34; http://&#34;或&#34; https://&#34;在离子运行android 上,它以&#34; file:///&#34;开头。

要解决此问题,您需要更改服务器端CORS过滤器以识别&#34; file ///&#34;请求:

Access-Control-Allow-Origin: *