我正在使用Retrofit来做一个基本的POST请求,我正在为请求提供一个基本的@Body.
@POST("/rest/v1/auth/login") LoginResponse login(@Body LoginRequest loginRequest);
当我为Retrofit构建界面时,我正在提供我自己的自定义OkHttpClient,而我正在做的就是添加我自己的自定义身份验证:
@Provides @Singleton public Client providesClient() { OkHttpClient httpClient = new OkHttpClient(); httpClient.setAuthenticator(new OkAuthenticator() { @Override public Credential authenticate(Proxy proxy, URL url, Listchallenges) throws IOException { return getCredential(); } @Override public Credential authenticateProxy(Proxy proxy, URL url, List challenges) throws IOException { return getCredential(); } }); return new OkClient(httpClient); }
当我使用OKHttp直接发送请求时,以及其他GET请求进行改造,但是当我使用改造来执行POST请求时,我会收到以下错误:
Caused by: java.net.HttpRetryException: Cannot retry streamed HTTP body at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponse(HttpURLConnectionImpl.java:324) at com.squareup.okhttp.internal.http.HttpURLConnectionImpl.getResponseCode(HttpURLConnectionImpl.java:508) at com.squareup.okhttp.internal.http.HttpsURLConnectionImpl.getResponseCode(HttpsURLConnectionImpl.java:136) at retrofit.client.UrlConnectionClient.readResponse(UrlConnectionClient.java:94) at retrofit.client.UrlConnectionClient.execute(UrlConnectionClient.java:49) at retrofit.RestAdapter$RestHandler.invokeRequest(RestAdapter.java:357) at retrofit.RestAdapter$RestHandler.invoke(RestAdapter.java:282) at $Proxy3.login(Native Method) at com.audax.paths.job.LoginJob.onRunInBackground(LoginJob.java:41) at com.audax.library.job.AXJob.onRun(AXJob.java:25) at com.path.android.jobqueue.BaseJob.safeRun(BaseJob.java:108) at com.path.android.jobqueue.JobHolder.safeRun(JobHolder.java:60) at com.path.android.jobqueue.executor.JobConsumerExecutor$JobConsumer.run(JobConsumerExecutor.java:172) at java.lang.Thread.run(Thread.java:841)
我玩过它.如果我删除身份验证,并指向不需要身份验证的服务器,那么它可以正常工作.
所以我必须发送信息.
获取身份验证质询请求.
响应挑战请求.
尝试再次重新发送请求,然后抛出错误.
不知道怎么解决这个问题.任何帮助都会很精彩.