0

私は、既存の php サイトに対して認証を行い、その中でいくつかのリクエストを実行する必要がある ionic2 アプリを作成しています。サイトのソースを制御したりアクセスしたりすることはできません。私はionic2を使用しているので、CORSの問題はないはずです。また、テスト目的でクロムで手動で無効にしました

data/login.php のページへのログイン要求を行うサービスを作成しました。問題は、ログインが常に失敗し、_body が常に "" になることです。

また、セッションを維持するために設定された Cookie を取得して保存する方法もわかりません。

ログインサービスの関連コードは次のとおりです。

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

ブラウザからの実際のリクエストは次のようになります

適切なリクエスト:

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

リクエストデータ: usr=[username]&psw=[password]&invia_annuario=Accedi

応答:

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

私の製造された要求:

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

応答:

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

リモート サイトにリクエストを適切に送信するにはどうすればよいですか?また、そのセッション Cookie を取得するにはどうすればよいですか?

4

1 に答える 1

0

set代わりにメソッドを使用してフォーム データを作成することもできます。

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

この plunkr を参照してください: https://plnkr.co/edit/DknaczJrInjDnmOkLR6r?p=preview

于 2016-06-15T13:49:24.903 に答える