改装表格提交
Retrofit Form Submission
我正在尝试通过使用 RetroFit 填写登录表单来登录 CAS 服务。这是我的身份验证界面:
public interface AuthService {
@FormUrlEncoded
@POST("/cas/login")
void login(@Field("username") String username,
@Field("password") String password, Callback<Response> result);
}
当我尝试使用此界面并打印结果时:
new RestClient().getAuthService().login(
mUsername.getText().toString(), mPassword.getText().toString(),
new Callback<Response>() {
@Override
public void success(Response result, Response response) {
for(Header header : response.getHeaders()) {
Timber.d(header.getName() + ": " + header.getValue());
}
}
});
我收到 "login.example.com/cas/login"
的请求 headers 而不是提交表单后收到的 headers 响应。我该如何提交表单并获得回复 headers?
必须使用 @GET
而不是 @POST
才能实际填写表格并收到回复。所有表单值也必须作为查询提交。在此过程中,我切换到 Retrofit 2,但我也会 post 等效的 Retrofit 代码。
由于这个特定表单的设置方式,我还必须调用该表单一次来解析某些项目(登录票证、执行和事件)的值,然后第二次输入这些值加上用户名和密码。这会给我正确的响应,并使我能够设置正确的 cookie。
改造 2:
@GET("cas/login")
Observable<ResponseBody> login(@Query("lt") String loginTicket,
@Query("execution") String execution,
@Query("event") String event,
@Query("username") String username,
@Query("password") String password,
@Query("submit") String submit);
改造 1:
@GET("/cas/login")
void login(@Query("lt") String loginTicket,
@Query("execution") String execution,
@Query("event") String event,
@Query("username") String username,
@Query("password") String password,
@Query("submit") String submit,
ResponseBody response);
我正在尝试通过使用 RetroFit 填写登录表单来登录 CAS 服务。这是我的身份验证界面:
public interface AuthService {
@FormUrlEncoded
@POST("/cas/login")
void login(@Field("username") String username,
@Field("password") String password, Callback<Response> result);
}
当我尝试使用此界面并打印结果时:
new RestClient().getAuthService().login(
mUsername.getText().toString(), mPassword.getText().toString(),
new Callback<Response>() {
@Override
public void success(Response result, Response response) {
for(Header header : response.getHeaders()) {
Timber.d(header.getName() + ": " + header.getValue());
}
}
});
我收到 "login.example.com/cas/login"
的请求 headers 而不是提交表单后收到的 headers 响应。我该如何提交表单并获得回复 headers?
@GET
而不是 @POST
才能实际填写表格并收到回复。所有表单值也必须作为查询提交。在此过程中,我切换到 Retrofit 2,但我也会 post 等效的 Retrofit 代码。
由于这个特定表单的设置方式,我还必须调用该表单一次来解析某些项目(登录票证、执行和事件)的值,然后第二次输入这些值加上用户名和密码。这会给我正确的响应,并使我能够设置正确的 cookie。
改造 2:
@GET("cas/login")
Observable<ResponseBody> login(@Query("lt") String loginTicket,
@Query("execution") String execution,
@Query("event") String event,
@Query("username") String username,
@Query("password") String password,
@Query("submit") String submit);
改造 1:
@GET("/cas/login")
void login(@Query("lt") String loginTicket,
@Query("execution") String execution,
@Query("event") String event,
@Query("username") String username,
@Query("password") String password,
@Query("submit") String submit,
ResponseBody response);