我POST
请求一直发送为GET
&得到了由API端点拒绝改造2 - POST请求成为GET?
为MyService类
@FormUrlEncoded
@POST("api/users/")
Call<List<User>> getUsers(@FieldMap HashMap<String, String> parameters);
请求代码
Gson builder = new GsonBuilder().setLenient().create();
Retrofit client = new Retrofit.Builder()
.baseUrl(Constants.API_ENDPOINT_TEST_URL)
.addConverterFactory(GsonConverterFactory.create(builder))
.build();
mApiService = client.create(MyService.class);
Call<List<User>> call = mApiService.getUsers(mParameters);
call.enqueue(new Callback<List<User>>() {
@Override
public void onResponse(Call<List<User>> call, Response<List<User>> response) {
mResponse = response.body();
mResponseObserver.onFinish(mResponse);
}
@Override
public void onFailure(Call<List<User>> call, Throwable t) {
mResponseObserver.onFailure();
}
});
但服务器拒绝它,因为它达到了服务器在GET
请求表格!?用调试器检查过,我看到:
rawResponse.request.method = GET
这里是观察窗口的截图显示了改装的请求对象:
正如你所看到的,请求方法为GET
。但奇怪的部分是在tag
,它显示一个请求对象POST
方法?
我在这里想念什么?
UPDATE
我添加日志记录拦截&这里是日志:
D/OkHttp: --> POST http://***/api/users/ http/1.1
D/OkHttp: Content-Type: application/x-www-form-urlencoded
D/OkHttp: Content-Length: 56
D/OkHttp: --> END POST
D/OkHttp: <-- 200 OK https://***/api/users/ (388ms)
D/OkHttp: Date: Thu, 01 Sep 2016 11:50:23 GMT
D/OkHttp: Server: Apache
D/OkHttp: X-Powered-By: PHP/5.4.34
D/OkHttp: Cache-Control: max-age=2592000
D/OkHttp: Expires: Sat, 01 Oct 2016 11:50:23 GMT
D/OkHttp: Vary: Accept-Encoding
D/OkHttp: Content-Type: application/json; charset=UTF-8
D/OkHttp: Set-Cookie: SESSION_DEFAULT=***; expires=Sun, 04-Sep-2016 11:50:24 GMT; path=/; HttpOnly
D/OkHttp: Set-Cookie: COOKIE[***]=***; path=/; httponly
D/OkHttp: Connection: close
D/OkHttp: <-- END HTTP
貌似请求是POST
。但是,服务器仍然回应错误消息,说请求方法是一个GET
嗯,我会多挖一点点。
在请求结束时删除“/”可能会解决您的问题。我有同样的问题,当我发送后方法服务器日志为**获取**,删除“/”在请求的最后修复我的问题。 – Amir
@Amir我做了没有工作。 – RyanB
你尝试过登录吗?我建议你检查真正发送的GET请求。 https://futurestud.io/blog/retrofit-2-log-requests-and-responses – nshmura