← Back to list

Tek Bir Metod İle HTTP istekleri

okhttp, http request, headers, params, post, get, basic authentication

Huseyin Baduk · 2025-01-05 19:25 · 0 claps · 1.4 min read
#okhttp #http-request #request-body #http-headers #params
Open on Medium ↗

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