【问题标题】:Angular 2 http post trying to simulate a formAngular 2 http post试图模拟表单
【发布时间】:2016-10-16 16:15:51
【问题描述】:

我正在制作一个 ionic2 应用程序,该应用程序需要对现有 php 站点进行身份验证,然后在其中执行一些请求。我对网站的源没有任何控制权或访问权。 由于我使用的是 ionic2 我不应该有 CORS 问题,我还在 chrome 中手动禁用它以进行测试

我在 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?

【问题讨论】:

    标签: angular ionic2 angular2-http


    【解决方案1】:

    您可以尝试使用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

    【讨论】:

    • 这似乎没有什么不同,我仍然得到相同的响应,身体空空,没有其他线索
    • 您使用哪个版本的 Angular2?我用这种方式 URLSearchParams 类...
    • 就我而言,使用您的代码,请求已正确发送。看到这个 plunkr:plnkr.co/edit/DknaczJrInjDnmOkLR6r?p=preview.
    • 我用我自己的数据尝试了你的示例,但我什至无法运行它,我只在控制台中收到错误:错误:XHR 错误(404 未找到)正在加载npmcdn.com/@angular/platform-browser-dynamic/… 加载错误@ 987654324@ as "@angular/platform-b​​rowser-dynamic" from run.plnkr.co/w7Tyly21c2f5fhvV/src/main.ts 不管怎样,请求也确实在我的代码中发送,问题是我不知道如何使用返回给我的 cookie,因为我什至找不到它在哪里
    猜你喜欢
    • 2013-12-22
    • 1970-01-01
    • 2023-04-05
    • 2021-08-21
    • 2016-11-23
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    • 2017-12-07
    相关资源
    最近更新 更多