2016-04-14 17 views
5

retrofit Kullanarak POST isteğini http://milzinas.lt/oauthsilent/authorize yapmak istiyorum. Bu URL, sizi http://milzinas.e-bros.lt/oauthsilent/authorize adresine yönlendirdiği için özeldir. Benim uyarlama kurulumum OkHttpClient kullanıyor. Yalnızca OkHttpClient kullanarak istekte bulunursam, yönlendirme işleri düzgün yapılır, yani 401 durum kodu alınır. Ancak, aynı uyumluluk ile aynı OkHttpClient kullandığınızda yanıt, 307 durum kodudur. Bence bu, OkHttpClient'i tamamlayan OkClient uygulaması ile ilgili bir şey var ama emin değilim. Bu senaryoyu test etmek için kullandığım kod aşağıdadır. Bunları kütüphaneleri kullanıyorum:OkHttp, güçlendirme ile kullanıldığında POST isteklerini yeniden yönlendirmiyor

com.squareup.retrofit:retrofit:1.9.0 
com.squareup.okhttp:okhttp:2.2.0 

Ben URL başka bir URL'ye yönlendiren zaman http istemci iki talep yapmak zorundadır anlıyoruz. Benim durumumda ilk istek 307 (Geçici Yönlendirme), ikincisi ise 401 (Yetkisiz). Ancak, güçlendirme her zaman ilk isteğin yanıtını döndürür. Yeniden yönlendirmeyle yeniden yönlendirmenin nasıl yapıldığını biliyor musunuz? Belki başka bir HTTP istemcisi kullanarak bunu başarabilirim? Herhangi bir öneri takdir edilecektir. Ben konsol baskılar aşağıdaki kodu çalıştırdığınızda

Yani

Retrofit failure. Status: 307 
OkHttp. Status: 401 

Ben

+0

Lütfen daha yeni bir OkHttp sürümüne yükseltin. 2.7.5 birçok problemi çözdü. –

+1

Ve OkHttp 3.x daha da iyisi! –

+3

En son retrofit (2.0.0-beta2) ve OkHttp (3.2.0) sürümleriyle bile sorun devam ediyor. – Egis

cevap

0

sorun son v3 bile devam}

Retrofit failure. Status: 401 
OkHttp. Status: 401 

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

olmak istiyorum .5.0 o Bu geçici çözüm, https://github.com/square/okhttp/issues/936#issuecomment-266430151

İlgili konular