2016-06-15 8 views
0

Ich mache eine ionic2-App, die auf einer bestehenden PHP-Site authentifizieren muss und dann einige Anfragen darin ausführen. Ich habe keine Kontrolle oder keinen Zugriff auf die Quelle der Website. Da ich verwende ionic2 ich nicht CORS Fragen haben, ich habe es in Chrom für Testzwecke auch manuellAngular 2 HTTP-Post versucht, ein Formular zu simulieren

ich deaktiviert einen Dienst gemacht, die auf Daten/login.php Das Problem der Login-Anfrage an die Seite tut ist, dass der Login immer fehlschlägt und _body immer "" ist.

Auch ich weiß nicht, wie man das Plätzchen erhält und speichert, das eingestellt wird, um die Sitzung zu behalten.

Hier ist der entsprechende Code des Login Service:

doLogin(username, password) { 

    var headers = new Headers(); 
    headers.append('content-type', 'application/x-www-form-urlencoded') 

    var params = new URLSearchParams(); 
    params.append('usr', username); 
    params.append('psw', password); 
    params.append('invia_annuario', 'Accedi'); 


    this.http.post(this.loginPage, params.toString(), { headers: headers }) 
     .subscribe(
     data => { 

      console.log(data); 


     }, 
     Error => { console.log(Error) }, 
     () => { console.log("Done") } 
     ); 
} 

Hier ist, was die reale Anforderung von einem Browser wie

Proper Anfrage aussieht:

POST /data/login.php HTTP/1.1 
Host: [website] 
Connection: keep-alive 
Content-Length: 55 
Cache-Control: max-age=0 
Origin: [website] 
Upgrade-Insecure-Requests: 1 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.33 Safari/537.36 
Content-Type: application/x-www-form-urlencoded 
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
Referer: http://www.lions.it/data/login.php 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 

Anforderungsdaten: usr=[username]&psw=[password]&invia_annuario=Accedi

Antwort se:

HTTP/1.1 200 OK 
Date: Wed, 15 Jun 2016 13:34:24 GMT 
Server: Apache 
X-Powered-By: PHP/5.5.33 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Refresh: 0; URL=./index.php 
Set-Cookie: PHPSESSID=6qp5p3f8tm7bm3hqgttfqk20m1; path=/ 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

meine hergestellte Anfrage:

POST /data/login.php HTTP/1.1 
Host: [website] 
Connection: keep-alive 
Content-Length: 55 
Origin: http://localhost:8100 
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/52.0.2743.33 Safari/537.36 
content-type: application/x-www-form-urlencoded 
Accept: */* 
Referer: http://localhost:8100/?ionicplatform=android 
Accept-Encoding: gzip, deflate 
Accept-Language: en-US,en;q=0.8 
Cookie: PHPSESSID=ua37v7sgojddlnt2d961t5gu33; legatus_post_views_count_22=1 

Antwort:

HTTP/1.1 200 OK 
Date: Wed, 15 Jun 2016 13:28:11 GMT 
Server: Apache 
X-Powered-By: PHP/5.5.33 
Expires: Thu, 19 Nov 1981 08:52:00 GMT 
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 
Pragma: no-cache 
Refresh: 0; URL=./index.php 
Content-Length: 0 
Keep-Alive: timeout=5, max=100 
Connection: Keep-Alive 
Content-Type: text/html 

Wie richtig eine Anfrage an den Remote-Standort sende ich und wie bekomme ich den Session-Cookie?

Antwort

0

könnten Sie versuchen, die set Methode zu verwenden, anstatt die Formulardaten zu erstellen:

var params = new URLSearchParams(); 
params.set('usr', username); 
params.set('psw', password); 
params.set('invia_annuario', 'Accedi'); 

dieses plunkr Siehe: https://plnkr.co/edit/DknaczJrInjDnmOkLR6r?p=preview.

+0

Das scheint nichts anderes zu tun, ich bekomme immer noch die gleiche Antwort mit einem leeren Körper und keine anderen Hinweise – MaddoScientisto

+0

Welche Version von Angular2 benutzen Sie? Ich benutze so die Klasse "URLSearchParams" ... –

+0

In meinem Fall und mit Ihrem Code wird die Anfrage korrekt gesendet. Siehe dieses Plunkr: https://plnr.co/edit/DknaczJrInjDnmOkLR6r?p=preview. –