Android LoginActivity使用标准的http请求

时间:2016-06-15 21:35:49

标签: android http authentication login

我正在使用LoginActivity模板,我正在尝试使用标准http请求使用电子邮件和密码登录网站。该网站没有提供API,所以我想以某种方式镜像网站登录,填写页面上的电子邮件和密码框,然后发送登录请求。

考虑登录到stackoverflow,例如通过输入电子邮件和密码TextView,并使用这些凭证向认证服务器发送标准的http请求,确切地说它将如何在浏览器中发生(相同的请求和地址) )。

我之前没有做过这样的事情,我不知道是否可能,所以请原谅我的无知。

2 个答案:

答案 0 :(得分:1)

这在Android中以与在Web浏览器中类似的方式完成。也就是说,您将发送带有适当参数的 POST 请求,让我们说一个JSON对象,以便解释包含以下内容的内容:

{
  username: 'myUsername'
  password: 'mypass'
}

这将得到处理,如果您的凭据是正确的,您将得到一个可能包含各种数据的响应,其中包括accessToken(可能称之为略有变化)。

您应该记住此访问令牌并使用它来从站点获取任何其他数据,因为从那里使用该令牌来验证您。我有一个我亲自制作的API,并且在每个请求中发送accessToken作为参数,用于未注册用户无法使用的资源。

至于技术方面,我使用一个名为OkHttp的漂亮库来发送Http请求,它非常有价值且易于使用。这是一段代码片段,可以看到我在谈论的内容:

//JSON is a media type for parsing json
//json is a json string containing payload e.g. username and pass like in the example
OkHttpClient httpClient = new OkHttpClient();
RequestBody body = RequestBody.create(JSON, json);
    Request request = new Request.Builder()
            .url(url)
            .post(body)
            .build();
    Response response = httpClient.newCall(request).execute();

唯一可以解决的问题是正确解析response。您可以找到关于此主题的各种解决方案,但我个人使用两种方法,BufferedReader使用response.body().byteStream()获得巨大响应,使用普通旧String使用{{1}获取不太大的响应}}

这不是一个简短但非常彻底的解释,所以如果你没有得到一些帮助,请随时要求澄清。

答案 1 :(得分:0)

假设您需要使用标准http请求从您的应用登录到StackOverflow等网站。这根本不可能。因为没有组织允许第三方网站/应用程序处理其用户'证书。如果他们打算与第三方共享他们的资源,大多数组织都遵循以下程序:

  • 首先他们为你提供api使用。
  • 只有这个api,您才能让用户登录,即您无法处理这些凭据
  • 然后他们会向您提供与该用户对应的令牌。
  • 使用该令牌,您可以执行后续请求。

如果组织没有提供api,那么他们很可能处于不允许第三方网站/应用访问其用户的情况。资源。