Android
OkHttp
खोज…
इंटरसेप्टर लॉगिंग
Interceptors
का उपयोग OkHttp
कॉल को इंटरसेप्ट करने के लिए किया जाता है। अवरोधन का कारण कॉल को मॉनिटर करना, फिर से लिखना और पुनः प्रयास करना हो सकता है। इसका उपयोग निवर्तमान अनुरोध या आने वाली प्रतिक्रिया दोनों के लिए किया जा सकता है।
class LoggingInterceptor implements Interceptor {
@Override public Response intercept(Interceptor.Chain chain) throws IOException {
Request request = chain.request();
long t1 = System.nanoTime();
logger.info(String.format("Sending request %s on %s%n%s",
request.url(), chain.connection(), request.headers()));
Response response = chain.proceed(request);
long t2 = System.nanoTime();
logger.info(String.format("Received response for %s in %.1fms%n%s",
response.request().url(), (t2 - t1) / 1e6d, response.headers()));
return response;
}
}
जवाब देना
private static final Interceptor REWRITE_CACHE_CONTROL_INTERCEPTOR = new Interceptor() {
@Override public Response intercept(Interceptor.Chain chain) throws IOException {
Response originalResponse = chain.proceed(chain.request());
return originalResponse.newBuilder()
.header("Cache-Control", "max-age=60")
.build();
}
};
मूल उपयोग उदाहरण
मैं उदाहरण के लिए HttpClient
नामक एक वर्ग में अपने OkHttp
को लपेटना पसंद करता हूं, और इस वर्ग में मेरे पास प्रत्येक प्रमुख HTTP क्रिया के लिए विधियां हैं, post
, get
, put
और delete
, सबसे अधिक। (मैं आमतौर पर एक इंटरफ़ेस शामिल करता हूं, ताकि इसे लागू करने के लिए रखा जा सके, ताकि जरूरत पड़ने पर आसानी से एक अलग कार्यान्वयन में बदल सकें):
public class HttpClient implements HttpClientInterface{
private static final String TAG = OkHttpClient.class.getSimpleName();
public static final MediaType JSON
= MediaType.parse("application/json; charset=utf-8");
OkHttpClient httpClient = new OkHttpClient();
@Override
public String post(String url, String json) throws IOException {
Log.i(TAG, "Sending a post request with body:\n" + json + "\n to URL: " + url);
RequestBody body = RequestBody.create(JSON, json);
Request request = new Request.Builder()
.url(url)
.post(body)
.build();
Response response = httpClient.newCall(request).execute();
return response.body().string();
}
वाक्य रचना के लिए एक ही है put
, get
और delete
1 शब्द (के लिए छोड़कर .put(body)
) तो यह अच्छी तरह से है कि कोड पोस्ट करने के लिए अप्रिय हो सकता है। उपयोग बहुत सरल है, बस कुछ json
पेलोड के साथ कुछ url
पर उपयुक्त विधि को कॉल करें और विधि एक स्ट्रिंग लौटेगी जिसके परिणामस्वरूप आप बाद में उपयोग कर सकते हैं और पार्स कर सकते हैं। मान लेते हैं कि प्रतिक्रिया एक हो जाएगा करते हैं json
, हम एक बना सकते हैं JSONObject
इसे से आसानी से:
String response = httpClient.post(MY_URL, JSON_PAYLOAD);
JSONObject json = new JSONObject(response);
// continue to parse the response according to it's structure
सिंक्रोनस कॉल प्राप्त करें
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url(yourUrl)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
Headers responseHeaders = response.headers();
System.out.println(response.body().string());
}
अतुल्यकालिक कॉल प्राप्त करें
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
Request request = new Request.Builder()
.url(yourUrl)
.build();
client.newCall(request).enqueue(new Callback() {
@Override public void onFailure(Call call, IOException e) {
e.printStackTrace();
}
@Override
public void onResponse(Call call, Response response) throws IOException {
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
Headers responseHeaders = response.headers();
System.out.println(response.body().string());
}
});
}
पोस्टिंग फॉर्म पैरामीटर
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
RequestBody formBody = new FormBody.Builder()
.add("search", "Jurassic Park")
.build();
Request request = new Request.Builder()
.url("https://en.wikipedia.org/w/index.php")
.post(formBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
मल्टीपार्ट अनुरोध पोस्ट करना
private static final String IMGUR_CLIENT_ID = "...";
private static final MediaType MEDIA_TYPE_PNG = MediaType.parse("image/png");
private final OkHttpClient client = new OkHttpClient();
public void run() throws Exception {
// Use the imgur image upload API as documented at https://api.imgur.com/endpoints/image
RequestBody requestBody = new MultipartBody.Builder()
.setType(MultipartBody.FORM)
.addFormDataPart("title", "Square Logo")
.addFormDataPart("image", "logo-square.png",
RequestBody.create(MEDIA_TYPE_PNG, new File("website/static/logo-square.png")))
.build();
Request request = new Request.Builder()
.header("Authorization", "Client-ID " + IMGUR_CLIENT_ID)
.url("https://api.imgur.com/3/image")
.post(requestBody)
.build();
Response response = client.newCall(request).execute();
if (!response.isSuccessful()) throw new IOException("Unexpected code " + response);
System.out.println(response.body().string());
}
OkHttp की स्थापना
मावेन के माध्यम से पकड़ो:
<dependency>
<groupId>com.squareup.okhttp3</groupId>
<artifactId>okhttp</artifactId>
<version>3.6.0</version>
</dependency>
या ग्रेडेल:
compile 'com.squareup.okhttp3:okhttp:3.6.0'