2016-11-30 19 views
5

Po prostu próbuję wykonać połączenie http w moim projekcie IONIC 2. Po uruchomieniu jonowego służyć działa dobrze. Ale kiedy uruchomię jonowy bieg anroid, aby uruchomić go na moim urządzeniu, daje mi to 403 (zabronione) odpowiedzi.Wykonywanie połączenia HTTP POST w Ionic 2 daje zabronioną odpowiedź

To jest moje PaymentService.ts, w którym zostało dokonane wezwanie 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; 
    } 
} 
} 

Aby przezwyciężyć ten problem Próbowałem kilka rzeczy, jak

  1. Run Cordova plugin dodać Cordova-plugin- biała lista
  2. Dodano tę linię w moim pliku 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. . link ->https://github.com/apache/cordova-plugin-whitelist, aby dodać <access origin> jako znaczniki *, <allow-navigation>, <allow-intent> o określonych atrybutach.
  4. Próbowano dodać proxyUrl jak wspomniano tu http://blog.ionic.io/handling-cors-issues-in-ionic/

ale w moim przypadku nie Powyższe rozwiązanie działa.

Kiedy uderzę połączenie post z moim android urządzenia pojawia się następujący komunikat o błędzie:

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

Mam następujący jonowej informacji:

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 

Ktoś z jakiegoś rozwiązania?

Z góry dziękuję.

Odpowiedz

0

Czy możesz spróbować tego przykładu? Czy na pewno chcesz wysłać odpowiednie nagłówki

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

Tak, jestem wysłanie poprawne nagłówki. Ta sama prośba działa dobrze z serwerem jonowym (na przeglądarce), ale nie z ** jonowym uruchomieniem androida ** (to jest na rzeczywistym urządzeniu) Próbowałem powyższego przykładu, ale wciąż ten sam problem –

+0

Spróbuj "bieg jonowy" android -l -s -c' da ci lepszy log konsoli, jest tam także 'chrome: // inspect' i tam są inspekcje urządzeń – flakerimi

+0

yes @ flakerimi Próbowałem już' chrome: // inspect' już, ale to jest niewiele pomocy. W rzeczywistości przyczyną problemu jest pochodzenie: file: // 'które nie jest dozwolone od strony serwera. –

0

byłem coraz ten sam błąd tutaj, stwierdziliśmy, że tak się stało, ponieważ po uruchomieniu jonową służyć, żądanie rozpoczęcia pochodzenie z „http: //” lub " https: // "i jonowy bieg android zaczyna się od" file: /// ".

Aby rozwiązać ten problem, musisz zmienić CORS boczne filtr serwera rozpoznać plik „///” wnioski:

Access-Control-Allow-Origin: * 
+1

Czy jonowe proxy nie powinno usunąć nagłówka ORIGIN? Jeśli nie, wszyscy muszą usunąć Access-Control-Allow-Origin, a to nie powinno być rozwiązaniem! –