使用外部 Android 应用程序 (Okhttp) 登录 Moodle
Moodle Login with an external Android App (Okhttp)
感谢您的宝贵时间。我正在为学校编写 Android 应用程序,需要 Moodle 登录的身份验证表(服务器以 /index.php 结尾)。
- 我的目标:在响应中获取 "Set-Cookie" Header,其中包含活动 Cookie。如果服务器状态返回“303(查看其他)”,则会给出此信息。
- 我的问题:我应该如何 post 到登录服务器,以获得状态“303”(因此也是正确的 Cookie)?
我不知道,“.add”方法是对还是错,或者我应该向服务器发送更多还是更少。
class MoodleLogin{
public static void FirstRequest(String url) throws Exception {
final OkHttpClient client = new OkHttpClient();
//FORM BODY
RequestBody formBody = new FormBody.Builder()
.add("username", USERNAME) // Username
.addEncoded("password", PASSWORT) //Passwort
.add("token", "6f65e84f626ec97d9eeee7ec45c88303") //Security Key for Moodle mobile web service (I dont know if I need that)
.build();
// A normal Request
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
// Asynchronous Call via Callback with onFailure and onResponse
client.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("Internet", "request failed: " + e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) { // Server Status is not 200 - THAT IS WHAT I WANT
Log.d("Server Status", response.message().toString());
throw new IOException("Unexpected code ");
} else { // Server Status is 200(OK)
Log.d("Server Status", response.message().toString());
}
response.body().close();
}
}); // End of "onResponse"
}
此和平代码仅 returns 服务器状态“200”(我的情况出了什么问题)。
有谁知道,我必须改变什么才能获得状态“303”?我用 hurl.it(HTTP 请求网站)对其进行了测试,只有当我像普通参数一样 post "username" 和 "password" 时它才有效。
感谢您的每一个回答和提示!
我自己回答的。所以这是正确的代码:
Connection.Response res = Jsoup
.connect("your Moodle-Login Page")
.data("username", username, "password", password)
.method(Connection.Method.POST)
.execute();
String Login_cookies = res.cookies().toString();
String cookie = Login_cookies.substring(1, 50);
System.out.println("COOKIES: "+cookie);
感谢您的宝贵时间。我正在为学校编写 Android 应用程序,需要 Moodle 登录的身份验证表(服务器以 /index.php 结尾)。
- 我的目标:在响应中获取 "Set-Cookie" Header,其中包含活动 Cookie。如果服务器状态返回“303(查看其他)”,则会给出此信息。
- 我的问题:我应该如何 post 到登录服务器,以获得状态“303”(因此也是正确的 Cookie)?
我不知道,“.add”方法是对还是错,或者我应该向服务器发送更多还是更少。
class MoodleLogin{
public static void FirstRequest(String url) throws Exception {
final OkHttpClient client = new OkHttpClient();
//FORM BODY
RequestBody formBody = new FormBody.Builder()
.add("username", USERNAME) // Username
.addEncoded("password", PASSWORT) //Passwort
.add("token", "6f65e84f626ec97d9eeee7ec45c88303") //Security Key for Moodle mobile web service (I dont know if I need that)
.build();
// A normal Request
Request request = new Request.Builder()
.url(url)
.post(formBody)
.build();
// Asynchronous Call via Callback with onFailure and onResponse
client.newCall(request).enqueue(new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i("Internet", "request failed: " + e.toString());
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) { // Server Status is not 200 - THAT IS WHAT I WANT
Log.d("Server Status", response.message().toString());
throw new IOException("Unexpected code ");
} else { // Server Status is 200(OK)
Log.d("Server Status", response.message().toString());
}
response.body().close();
}
}); // End of "onResponse"
}
此和平代码仅 returns 服务器状态“200”(我的情况出了什么问题)。 有谁知道,我必须改变什么才能获得状态“303”?我用 hurl.it(HTTP 请求网站)对其进行了测试,只有当我像普通参数一样 post "username" 和 "password" 时它才有效。
感谢您的每一个回答和提示!
我自己回答的。所以这是正确的代码:
Connection.Response res = Jsoup
.connect("your Moodle-Login Page")
.data("username", username, "password", password)
.method(Connection.Method.POST)
.execute();
String Login_cookies = res.cookies().toString();
String cookie = Login_cookies.substring(1, 50);
System.out.println("COOKIES: "+cookie);