改装表格提交

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);