.Net Core'da HttpClient ile Proxy Kullanımı

.Net Core'da HttpClient ile Proxy Kullanımı

.Net Core ile geliştirdiğimiz uygulamalarda HttpClient sınıfını kullanarak uç noktalara istek atmamız gerekebilir. Örnek olarak kurumsal firmalarda çalışacak olan uygulamanız internet ortamındaki bir adrese istek göndermek isteyebilir. Ancak uygulamanızın çalışmış olduğu sunucunun internet erişimi kısıtlandığından dolayı ilgili adrese erişemeyebilirsiniz veya HttpClient sınıfı kullanarak göndermiş olduğunuz isteği ve gelen cevabı Charles Web Debugging Proxy gibi uygulamalar ile araya girerek takip etmek isteyebilirsiniz. Bu işlemleri yapabilmeniz için HttpClient ile birlikte proxy kullanmanız gerekmektedir.

HttpClient ile atılan isteklerde proxy tanımı yapabilmek için HttpClientHandler ve WebProxy sınıflarına ihtiyacımız vardır.

Örnek uygulama olarak .Net Core’da bir console projesi oluşturacağız. Aşağıda bash komutları ile projemizi oluşturalım.

dotnet new console -n NetCoreHttpClientProxy
cd NetCoreHttpClientProxy

Projemizi kullanmış olduğumuz metin editörü veya IDE ile açarak aşağıdaki şekilde kodlarımızı yazalım.

using System;
using System.Net;
using System.Net.Http;
using System.Threading.Tasks;
 
namespace NetCoreHttpClientProxy
{
    class Program
    {
        static async Task Main(string[] args)
        {
            const string ProxyUrl = "http://localhost:5001";
            const string ProxyUsername = "";
            const string ProxyPassword = "";
            const string RequestUrl = "https://google.com";
 
            var proxy = new WebProxy
            {
                Address = new Uri(ProxyUrl),
                Credentials = new NetworkCredential(ProxyUsername, ProxyPassword)
            };
 
            var httpClientHandler = new HttpClientHandler
            {
                Proxy = proxy,
                UseProxy = true
            };
 
            using (var client = new HttpClient(httpClientHandler))
            {
                var response = await client.GetAsync(RequestUrl);
 
                if (response.IsSuccessStatusCode)
                {
                    var responseString = await response.Content.ReadAsStringAsync();
                    Console.WriteLine(responseString);
                }
            }
        }
    }
}

Yapmış olduğumuz işlemleri açıklamak gerekirse https://google.com adresine http://localhost:5001 proxy adresini kullanarak istek göndermekteyiz.

Öncelikle WebProxy sınıfını kullanarak proxy adresini ve proxy’ye ait kullanıcı adı ve şifre tanımlamalarını yapıyoruz. Eğer proxy’ye ait herhangi bir kullanıcı adı ve şifre bilgisi bulunmuyorsa Credentials özelliğine değer vermenize gerek yoktur.

Sonrasında ise oluşturmuş olduğumuz WebProxy nesnesini HttpClientHandler tipindeki bir nesnenin Proxy özelliğine atıyoruz ve ilgili nesne örneğinin UseProxy özelliğini true olarak ayarlıyoruz.

En son işlem olarak ise HttpClient tipinin nesne örneğini oluştururken yapıcı metoda (constructor) HttpClientHandler tipindeki nesne örneğini vermek. Bu aşamadan sonra HttpClient tipindeki nesne örneğinden gönderilecek işlem proxy üzerinden geçerek atılacaktır.

Örnek kodlara https://github.com/mennan/netcore-httpclient-proxy adresinden ulaşabilirsiniz.