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?
Das scheint nichts anderes zu tun, ich bekomme immer noch die gleiche Antwort mit einem leeren Körper und keine anderen Hinweise – MaddoScientisto
Welche Version von Angular2 benutzen Sie? Ich benutze so die Klasse "URLSearchParams" ... –
In meinem Fall und mit Ihrem Code wird die Anfrage korrekt gesendet. Siehe dieses Plunkr: https://plnr.co/edit/DknaczJrInjDnmOkLR6r?p=preview. –