Tek Bir Metod İle HTTP istekleri
okhttp, http request, headers, params, post, get, basic authentication
Tek Bir Metod İle HTTP istekleri
okhttp, http request, headers, params, post, get, basic authentication
Giriş
Java uygulamamızdan başka bir kaynağa HTTP isteği atmak istediğimizde bunu kütüphane kullanarak gerçekleştirmek mantıklı olacaktır.
Artılarıyla eksileriyle bir çok kütüphane seçeneği karşımıza çıkıyor(Apache Http, OkHttp). En nihayetinde hepsinin ortak noktası bir HTTP isteğinin bileşenleri işlemektir.
HTTP isteği bileşeni derken ne kastediyoruz; url, method tipi, body, param, header, content type ve daha nicesi. Kendiliğinden cache yapısı ve basitliği sebebiyle bizim tercihimiz OkHttp oldu.
Peki biz bu yazıda ne yapmaya çalışacağız?
Tek bir metod yazıp uygulama içerisinde ihtiyaç duyabileceğimiz tüm istekleri yönetmeye çalışacağız.
Bu methodumuzu da lombokun enfes dokunuşuyla Builder patterne göre dizayn etsek çok tatlı olmaz mı? Bence olur çağırma işleminde neden bunu yaptığımızı anlayacaksınız
Malum Bileşenler
url: istek atacağımız kaynak method: Http istek tipi (GET, POST, PATCH, DELETE vs) yalnız biz sadece get ve post işleyeceğiz. body: post istekleri için request body parametresi (Bu parametreyi JSON tipinde varsayacağız, siz değiştirebilirsiniz) params: daha çok get istekleri için url sonuna gelecek parametreler için header: güvenlik, tip gibi ayarlamalarda kullanacağımız seçenek
Class’ımızı yazalım!
@Builder
public class OkHttpRequest {
@NonNull
public String url;
@NonNull
public String method;
@Builder.Default
public String body = null;
@Builder.Default
public Map<String, String> params = null;
@Builder.Default
public Map<String, String> headers = null;
public String doRequest() {
// client
OkHttpClient client = new OkHttpClient().newBuilder().build();
// handle params
HttpUrl.Builder httpBuilder = HttpUrl.parse(url).newBuilder();
if (params != null) {
for (Map.Entry<String, String> param : params.entrySet()) {
httpBuilder.addQueryParameter(param.getKey(), param.getValue());
}
}
Request.Builder requestBuilder = new Request.Builder().url(httpBuilder.build());
// handle method
if (method.equalsIgnoreCase("get")) {
requestBuilder.get();
} else if (method.equalsIgnoreCase("post")) {
requestBuilder.post(RequestBody.create(MediaType.parse("application/json"), body));
}
// handle headers
if (headers != null) {
for (Map.Entry<String, String> header : headers.entrySet()) {
requestBuilder.addHeader(header.getKey(), header.getValue());
}
}
// execute
try {
Response response = client.newCall(requestBuilder.build()).execute();
return response.body().string();
} catch (IOException e) {
e.printStackTrace();
return "HTTPS isteginde bir hata gerceklesti";
}
}
}
OkHttpRequest isimli classımız ve doRequest isimli metodumuz emrimize amade
Örnek 1: Basic Authentication kullanılarak Post isteği atmak
Map<String, String> headers = new HashMap<>();
headers.put("Authorization", Credentials.basic("admin", "password"));
OkHttpRequest.builder()
.url("http://huseyinbaduk.com/api/v1/addmusic")
.body("{\"name\":\"" + musicname + "\"}")
.headers(headers)
.method("post")
.build()
.doRequest();
Not: RequestBody oluşturmak için builder kullanmanız tavsiye edilir.
Talep gelmesi halinde Örnekler artırılacaktır.
İyi çalışmalar dilerim
메타데이터
- post_id
- d4ecb4dba0b1
- slug
- tek-bir-metod-i̇le-http-istekleri-d4ecb4dba0b1
- url
- https://medium.com/@hbaduk/tek-bir-metod-i%CC%87le-http-istekleri-d4ecb4dba0b1
- canonical_url
- https://medium.com/@hbaduk/tek-bir-metod-i%CC%87le-http-istekleri-d4ecb4dba0b1
- author_url
- https://medium.com/@hbaduk
- status
- ok
- fetched_at
- 2026-07-21 10:23:46