我正在使用LoginActivity模板,我正在尝试使用标准http请求使用电子邮件和密码登录网站。该网站没有提供API,所以我想以某种方式镜像网站登录,填写页面上的电子邮件和密码框,然后发送登录请求。
考虑登录到stackoverflow,例如通过输入电子邮件和密码TextView,并使用这些凭证向认证服务器发送标准的http请求,确切地说它将如何在浏览器中发生(相同的请求和地址) )。
我之前没有做过这样的事情,我不知道是否可能,所以请原谅我的无知。
答案 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,那么他们很可能处于不允许第三方网站/应用访问其用户的情况。资源。