retrofit
का उपयोग करके मैं http://milzinas.lt/oauthsilent/authorize
पर POST अनुरोध करना चाहता हूं। यह यूआरएल विशेष है क्योंकि यह आपको http://milzinas.e-bros.lt/oauthsilent/authorize
पर रीडायरेक्ट करता है। मेरा रेट्रोफिट सेटअप OkHttpClient
का उपयोग करता है। अगर मैं केवल OkHttpClient का उपयोग करके अनुरोध करता हूं तो केवल ठीक काम करता है, यानी 401 स्थिति कोड प्राप्त होता है। हालांकि, जब मैं रेट्रोफिट के साथ एक ही ओकेएचटीपी क्लाइंट का उपयोग करता हूं तो प्रतिक्रिया स्थिति कोड 307 है। मुझे लगता है कि OkClient
कार्यान्वयन के साथ इसका कुछ संबंध है जो OkHttpClient को लपेटता है लेकिन मुझे यकीन नहीं है। नीचे वह कोड है जिसका उपयोग मैंने इस परिदृश्य का परीक्षण करने के लिए किया था। मैं इन पुस्तकालयों का उपयोग कर रहा:ओकेएचटीपी पोस्ट अनुरोधों को रीडायरेक्ट नहीं करता है जब रेट्रोफिट
com.squareup.retrofit:retrofit:1.9.0
com.squareup.okhttp:okhttp:2.2.0
मैं समझता हूँ http ग्राहक दो अनुरोध करने के लिए है कि जब URL किसी अन्य URL पर आप पुनः निर्देशित किया गया है। मेरे मामले में पहला अनुरोध 307 (अस्थायी रीडायरेक्ट) देता है और दूसरा एक 401 (अनधिकृत) देता है। हालांकि, retrofit हमेशा पहले अनुरोध की प्रतिक्रिया देता है। क्या आप जानते हैं कि रीट्रोफिट के साथ रीडायरेक्टिंग को सही तरीके से कैसे बनाना है? शायद मैं इसे कुछ अन्य HTTP क्लाइंट का उपयोग करके प्राप्त कर सकता हूं? कोई भी सुझाव प्रशंसनीय होगा।
तो जब मैं कंसोल प्रिंट नीचे कोड निष्पादित
Retrofit failure. Status: 307
OkHttp. Status: 401
मैं इसे
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());
}
});
}
होने के लिए}
कृपया एक और हालिया OkHttp में अपग्रेड करें। 2.7.5 ने कई समस्याएं तय की हैं। –
और OkHttp 3.x भी बेहतर है! –
समस्या नवीनतम रेट्रोफिट (2.0.0-बीटा 2) और ओकेएचटीपी (3.2.0) संस्करणों के साथ भी बनी रहती है। – Egis