2016-11-30 18 views
5

Tôi chỉ đang cố thực hiện cuộc gọi http trong dự án IONIC 2 của mình. Khi tôi chạy ionic phục vụ nó hoạt động tốt. Nhưng khi tôi chạy ionic chạy anroid để chạy nó trên thiết bị của tôi nó mang lại cho tôi 403 (bị cấm) phản ứng.Thực hiện cuộc gọi HTTP POST trong Ionic 2 cho phản hồi bị cấm

Đây là PaymentService.ts của tôi trong đó gọi http đã được thực hiện

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; 
    } 
} 
} 

Để khắc phục vấn đề này tôi đã cố gắng một vài điều, như

  1. Run cordova cắm thêm cordova-plugin- danh sách trắng
  2. Đã thêm dòng này vào 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. Theo dõi liên kết ->https://github.com/apache/cordova-plugin-whitelist để thêm <access origin> dưới dạng *, <allow-navigation>, <allow-intent> thẻ có thuộc tính được chỉ định.
  4. Cố gắng thêm proxyUrl như đã đề cập ở đây http://blog.ionic.io/handling-cors-issues-in-ionic/

Nhưng Trong trường hợp của tôi, không có giải pháp trên đang làm việc.

Khi tôi nhấn gọi bài từ thiết bị Android của tôi, tôi nhận được phản ứng lỗi sau:

{"_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"} 

Tôi đã sau thông tin ion:

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 

Bất cứ ai có một số giải pháp?

Xin cảm ơn trước.

Trả lời

0

Bạn có thể thử ví dụ này không? Bạn có chắc chắn bạn đang gửi tiêu đề đúng

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);  
     }); 
    });   
} 
+0

Vâng, tôi đang gửi các tiêu đề chính xác. Các yêu cầu tương tự đang chạy tốt với ionic phục vụ (trên trình duyệt), nhưng không phải với ** ionic chạy android ** (đó là, trên thiết bị thực tế) Tôi đã thử ví dụ trên, nhưng vẫn cùng một vấn đề –

+0

Try' ionic run android -l -s -c' nó sẽ cung cấp cho bạn giao diện điều khiển tốt hơn cũng có 'chrome: // inspect' và có kiểm tra cho các thiết bị – flakerimi

+0

yes @flakerimi Tôi đã thử' chrome: // inspect' rồi, nhưng nó là không giúp đỡ nhiều. Trên thực tế, sự cố là do nguồn gốc: tệp: // 'không được phép từ phía máy chủ. –

0

tôi đã nhận được báo lỗi tương tự ở đây, tôi thấy rằng điều này xảy ra bởi vì khi bạn chạy ion phục vụ, yêu cầu khởi động nguồn gốc với "http: //" hoặc " https: // "và trên ionic chạy android bắt đầu bằng" tệp: /// ".

Để giải quyết vấn đề này, bạn cần phải thay đổi máy chủ CORS bên bộ lọc để nhận ra "tập tin ///" yêu cầu:

Access-Control-Allow-Origin: * 
+1

Không phải proxy ionic sẽ xóa tiêu đề ORIGIN ?? Nếu không, mọi người phải loại bỏ Access-Control-Allow-Origin và điều này không phải là giải pháp! –

Các vấn đề liên quan