Egi*_*gis 6 android retrofit okhttp
使用retrofit我想发出POST请求http://milzinas.lt/oauthsilent/authorize.此URL是特殊的,因为它会将您重定向到http://milzinas.e-bros.lt/oauthsilent/authorize.我的改造设置使用OkHttpClient.如果我只使用OkHttpClient发出请求,那么重定向工作正常,即收到401状态代码.但是,当我使用相同的OkHttpClient进行改造时,响应是状态代码307.我认为这与OkClient包装OkHttpClient的实现有关,但我不确定.下面是我用来测试这个场景的代码.我正在使用这些库:
com.squareup.retrofit:retrofit:1.9.0
com.squareup.okhttp:okhttp:2.2.0
Run Code Online (Sandbox Code Playgroud)
据我所知,当URL将您重定向到另一个URL时,http客户端必须发出两个请求.在我的情况下,第一个请求返回307(临时重定向),第二个请求返回401(未授权).但是,改造始终返回第一个请求的响应.你知道如何通过改造使重定向工作正常吗?也许我可以通过使用其他一些HTTP客户端实现这一目标?任何建议将不胜感激.
所以当我执行控制台打印下面的代码
Retrofit failure. Status: 307
OkHttp. Status: 401
Run Code Online (Sandbox Code Playgroud)
我想要它
Retrofit failure. Status: 401
OkHttp. Status: 401
Run Code Online (Sandbox Code Playgroud)
public class MainActivity extends AppCompatActivity {
interface Api {
@POST(URL)
@Headers("Accept: application/json")
void test(@Body Object dummy, Callback<Object> callback);
}
static final String BASE_URL = "http://milzinas.lt";
static final String URL = "/oauthsilent/authorize";
final OkHttpClient okHttpClient = new OkHttpClient();
Api api;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
RestAdapter retrofit = new RestAdapter.Builder()
.setEndpoint(BASE_URL)
.setClient(new OkClient(okHttpClient))
.setConverter(new Converter() {
@Override
public Object fromBody(TypedInput body, Type type) throws ConversionException {
return null;
}
@Override
public TypedOutput toBody(Object object) {
return null;
}
})
.build();
api = retrofit.create(Api.class);
makeRequestOkHttp();
makeRequestRetrofit();
}
void makeRequestOkHttp() {
new AsyncTask<Object, Object, Object>() {
@Override
protected Object doInBackground(Object... objects) {
try {
Request request = new Request.Builder().url(BASE_URL + URL).build();
com.squareup.okhttp.Response response = okHttpClient.newCall(request).execute();
android.util.Log.d("matka", "OkHttp. Status: " + response.code());
} catch (IOException e) {
throw new RuntimeException(e);
}
return null;
}
}.execute();
}
void makeRequestRetrofit() {
api.test("", new Callback<Object>() {
@Override
public void success(Object o, Response response) {
android.util.Log.d("matka", "Retrofit success. Status: " + response.getStatus());
}
@Override
public void failure(RetrofitError error) {
android.util.Log.d("matka", "Retrofit failure. Status: " + error.getResponse().getStatus());
}
});
}
Run Code Online (Sandbox Code Playgroud)
}