C#'de PDF İşleme için Proxy Sunucuları Nasıl Yapılandırılır

This article was translated from English: Does it need improvement?
Translated
View the article in English

Proxy konfigürasyonu, IronPDF'de, RenderHtmlAsPdf() yüklemelerinde bir yöntem parametresidirChromePdfRenderOptions üzerinde bir özellik değil. Bu ayrım önemlidir çünkü RenderUrlAsPdf() hiçbir proxy parametresi içermez, ve bu da, kurumsal proxy'nin arkasında canlı URL'leri render etmeniz gerektiğinde farklı bir strateji gerektirir. Varsayılan olarak null geçirirseniz, IronPDF doğrudan bağlantı kurar.

Bu kılavuz, üretim ortamında karşılaşacağınız her proxy senaryosunu kapsar: doğrudan proxy dizeleri, kimlik doğrulamalı kurumsal proxy'ler, RenderUrlAsPdf geçici çözümü, Docker konteyner konfigürasyonu, CI/CD boru hattı entegrasyonu ve SSL engelleme ve NTLM kimlik doğrulaması için yaygın sorun giderme kalıpları.

Ücretsiz 30 günlük deneme başlatın ve ortamınızda proxy yapılandırmalarını test edin.

Hızlı Başlangıç: Proxy Üzerinden PDF İşleme

IronPDF'in isteğe bağlı proxy parametresi, kurumsal proxy'lerin arkasındaki canlı web sayfalarını dönüştürmeye yardımcı olur. Hızlı başlamak için bu kod örneğini kullanın.

  1. NuGet Paket Yöneticisi ile https://www.nuget.org/packages/IronPdf yükleyin

    PM > Install-Package IronPdf
  2. Bu kod parçasını kopyalayıp çalıştırın.

    using IronPdf;
    
    var renderer = new ChromePdfRenderer();
    
    // Proxy is the third parameter — not a render option
    PdfDocument pdf = renderer.RenderHtmlAsPdf(
        "<h1>Hello from behind the proxy</h1>",
        baseUrlOrPath: null,
        proxy: "http://proxy.corp.local:8080"
    );
    pdf.SaveAs("proxied-output.pdf");
  3. Canlı ortamınızda test etmek için dağıtın

    Bugün projenizde IronPDF kullanmaya başlayın ücretsiz deneme ile

    arrow pointer

Minimal İş Akışı (3 Adım)

  1. IronPDF'i NuGet üzerinden yükleyin: Install-Package IronPdf
  2. Proxy dizgesini üçüncü parametre olarak RenderHtmlAsPdf()'a iletin
  3. Kimlik doğrulamalı proxy'ler için format: http(s)://host:port veya http(s)://user:pass@host:port

Proxy'yi RenderHtmlAsPdf'ye Nasıl Geçersiniz?

Proxy parametresi, dört yöntem imzasında isteğe bağlı bir string'dır:

// Instance methods
PdfDocument RenderHtmlAsPdf(string Html, string BaseUrlOrPath, string Proxy = null)
PdfDocument RenderHtmlAsPdf(string Html, Uri BaseUrl = null, string Proxy = null)

// Static methods
PdfDocument StaticRenderHtmlAsPdf(string Html, ChromePdfRenderOptions Options = null, string Proxy = null)
PdfDocument StaticRenderHtmlAsPdf(string Html, string BaseUrlOrPath, ChromePdfRenderOptions Options = null, string Proxy = null)
// Instance methods
PdfDocument RenderHtmlAsPdf(string Html, string BaseUrlOrPath, string Proxy = null)
PdfDocument RenderHtmlAsPdf(string Html, Uri BaseUrl = null, string Proxy = null)

// Static methods
PdfDocument StaticRenderHtmlAsPdf(string Html, ChromePdfRenderOptions Options = null, string Proxy = null)
PdfDocument StaticRenderHtmlAsPdf(string Html, string BaseUrlOrPath, ChromePdfRenderOptions Options = null, string Proxy = null)
' Instance methods
Function RenderHtmlAsPdf(Html As String, BaseUrlOrPath As String, Optional Proxy As String = Nothing) As PdfDocument
End Function

Function RenderHtmlAsPdf(Html As String, Optional BaseUrl As Uri = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function

' Static methods
Shared Function StaticRenderHtmlAsPdf(Html As String, Optional Options As ChromePdfRenderOptions = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function

Shared Function StaticRenderHtmlAsPdf(Html As String, BaseUrlOrPath As String, Optional Options As ChromePdfRenderOptions = Nothing, Optional Proxy As String = Nothing) As PdfDocument
End Function
$vbLabelText   $csharpLabel

Bu parametre null olarak ayarlandığında (varsayılan), IronPDF'in Chromium motoru, dış kaynaklara — HTML'nizde referans verilen stil sayfaları, resimler, fontlar ve JavaScript dosyaları — doğrudan bağlanır. Bir proxy dizgesi sağladığınızda, işleme motorundan gelen tüm HTTP/HTTPS talepleri bu proxy üzerinden yönlendirilir.

using IronPdf;

var renderer = new ChromePdfRenderer();

// Direct connection (default — no proxy)
var pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>");

// Through an unauthenticated proxy
var pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath: null,
    proxy: "http://squid.internal:3128"
);

// Using the Uri overload
var pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl: new Uri("https://assets.example.com/"),
    proxy: "https://proxy.corp.local:8443"
);
using IronPdf;

var renderer = new ChromePdfRenderer();

// Direct connection (default — no proxy)
var pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>");

// Through an unauthenticated proxy
var pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath: null,
    proxy: "http://squid.internal:3128"
);

// Using the Uri overload
var pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl: new Uri("https://assets.example.com/"),
    proxy: "https://proxy.corp.local:8443"
);
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

' Direct connection (default — no proxy)
Dim pdfDirect = renderer.RenderHtmlAsPdf("<h1>Direct</h1>")

' Through an unauthenticated proxy
Dim pdfProxied = renderer.RenderHtmlAsPdf(
    "<h1>Proxied</h1>",
    baseUrlOrPath:=Nothing,
    proxy:="http://squid.internal:3128"
)

' Using the Uri overload
Dim pdfUri = renderer.RenderHtmlAsPdf(
    "<h1>Proxied via Uri overload</h1>",
    baseUrl:=New Uri("https://assets.example.com/"),
    proxy:="https://proxy.corp.local:8443"
)
$vbLabelText   $csharpLabel

Proxy dizgesi, hem http:// hem de https:// şemalarını destekler. Uygulamanız ile proxy sunucusu arasındaki bağlantı için proxy'nin kendisi TLS şifrelemesi gerektirdiğinde https:// kullanın. Buradaki şema, nihai kaynak değil, proxy bağlantısı ile ilgilidir — bir http:// proxy, CONNECT tünelleme ile https:// kaynaklarını hala çekebilir.

Statik yöntem varyantları, aynı proxy parametresini kabul eder ve bu, konsolu uygulamaları veya birim testlerinde tek seferlik işlemler için kullanışlıdır:

// Static render with proxy — no renderer instance needed
var pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options: null,
    proxy: "http://proxy.corp.local:8080"
);
// Static render with proxy — no renderer instance needed
var pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options: null,
    proxy: "http://proxy.corp.local:8080"
);
' Static render with proxy — no renderer instance needed
Dim pdf = ChromePdfRenderer.StaticRenderHtmlAsPdf(
    "<h1>Static render through proxy</h1>",
    options:=Nothing,
    proxy:="http://proxy.corp.local:8080"
)
$vbLabelText   $csharpLabel

Önemli: ProxyAddress özelliği ChromePdfRenderOptions üzerinde yoktur. Onu orada aramayın. Proxy, kesinlikle RenderHtmlAsPdf ve StaticRenderHtmlAsPdf yüklemeleri üzerine bir yöntem parametresidir.

Kurumsal Bir Proxy ile Nasıl Kimlik Doğrulanır?

Çoğu kurumsal proxy kimlik bilgileri gerektirir. Onları doğrudan proxy URL'sine http(s)://username:password@host:port formatını kullanarak yerleştirin:

using IronPdf;

var renderer = new ChromePdfRenderer();

string proxyWithAuth = "http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: proxyWithAuth
);
pdf.SaveAs("report.pdf");
using IronPdf;

var renderer = new ChromePdfRenderer();

string proxyWithAuth = "http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080";

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: @"C:\templates\assets\",
    proxy: proxyWithAuth
);
pdf.SaveAs("report.pdf");
Imports IronPdf

Dim renderer As New ChromePdfRenderer()

Dim proxyWithAuth As String = "http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080"

Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
    htmlContent,
    baseUrlOrPath: "C:\templates\assets\",
    proxy:=proxyWithAuth
)
pdf.SaveAs("report.pdf")
$vbLabelText   $csharpLabel

Parolalardaki özel karakterleri URL kodlayın. Parolanız @, #, :, / veya diğer rezerv URI karakterlerini içeriyorsa, yüzde kodlaması yapılması gerekir. Genel kodlamalar:

Karakter Kodlanmış
@ %40
# %23
: %3A
/ %2F
! %21
% %25

Parolayı programatik olarak kodlamak için Uri.EscapeDataString() kullanın:

string rawPassword = "P@ssw0rd!";
string encoded = Uri.EscapeDataString(rawPassword); // "P%40ssw0rd%21"
string proxy = $"http://svc-account:{encoded}@proxy.corp.local:8080";
string rawPassword = "P@ssw0rd!";
string encoded = Uri.EscapeDataString(rawPassword); // "P%40ssw0rd%21"
string proxy = $"http://svc-account:{encoded}@proxy.corp.local:8080";
Imports System

Dim rawPassword As String = "P@ssw0rd!"
Dim encoded As String = Uri.EscapeDataString(rawPassword) ' "P%40ssw0rd%21"
Dim proxy As String = $"http://svc-account:{encoded}@proxy.corp.local:8080"
$vbLabelText   $csharpLabel

Proxy kimlik doğrulamasını web sayfası kimlik doğrulaması ile karıştırmayın. ChromeHttpLoginCredentials.NetworkUsername ve NetworkPassword özellikleri, render edilen web sayfasına (NTLM/Negotiate ile bir web sitesine) karşı kimlik doğrulaması yapar, proxy sunucusuna karşı değil. Proxy kimliği doğrulama için kimlik bilgileri yukarıda gösterildiği gibi proxy URL dizisinde yer alır.

Proxy Arkasında URL Nasıl İşlenir?

RenderUrlAsPdf() bir proxy parametresi kabul etmez. Bu, kasıtlı bir API tasarım seçimidir — RenderUrlAsPdf, Chromium'u bir URL'ye götürür ve HTML renderı sırasında kaynak yükleme için proxy konfigürasyonu, gezinti için farklı bir şekilde ele alınır.

Önerilen geçici çözüm: HTML'yi kendiniz HttpClient konfigüre edilmiş bir WebProxy ile alıp, ardından proxy parametresi ile birlikte RenderHtmlAsPdf() içinde HTML dizgesini taşıyın (böylece referans verilen varlıklar — resimler, CSS, yazı tipleri — da proxy üzerinden geçer).

using IronPdf;
using System.Net;
using System.Net.Http;

// Step 1: Configure HttpClient with the corporate proxy
var proxy = new WebProxy("http://proxy.corp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};

var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

// Step 2: Fetch the HTML from the target URL
string targetUrl = "https://dashboard.internal.corp/quarterly-report";
string html = await httpClient.GetStringAsync(targetUrl);

// Step 3: Render the fetched HTML, with the proxy for asset loading
var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    html,
    baseUrlOrPath: targetUrl,  // Resolves relative asset paths against the original URL
    proxy: "http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080"
);
pdf.SaveAs("quarterly-report.pdf");
using IronPdf;
using System.Net;
using System.Net.Http;

// Step 1: Configure HttpClient with the corporate proxy
var proxy = new WebProxy("http://proxy.corp.local:8080")
{
    Credentials = new NetworkCredential("svc-account", "P@ssw0rd!")
};

var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var httpClient = new HttpClient(handler);

// Step 2: Fetch the HTML from the target URL
string targetUrl = "https://dashboard.internal.corp/quarterly-report";
string html = await httpClient.GetStringAsync(targetUrl);

// Step 3: Render the fetched HTML, with the proxy for asset loading
var renderer = new ChromePdfRenderer();

PdfDocument pdf = renderer.RenderHtmlAsPdf(
    html,
    baseUrlOrPath: targetUrl,  // Resolves relative asset paths against the original URL
    proxy: "http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080"
);
pdf.SaveAs("quarterly-report.pdf");
Imports IronPdf
Imports System.Net
Imports System.Net.Http

' Step 1: Configure HttpClient with the corporate proxy
Dim proxy As New WebProxy("http://proxy.corp.local:8080") With {
    .Credentials = New NetworkCredential("svc-account", "P@ssw0rd!")
}

Dim handler As New HttpClientHandler With {.Proxy = proxy, .UseProxy = True}
Using httpClient As New HttpClient(handler)
    ' Step 2: Fetch the HTML from the target URL
    Dim targetUrl As String = "https://dashboard.internal.corp/quarterly-report"
    Dim html As String = Await httpClient.GetStringAsync(targetUrl)

    ' Step 3: Render the fetched HTML, with the proxy for asset loading
    Dim renderer As New ChromePdfRenderer()

    Dim pdf As PdfDocument = renderer.RenderHtmlAsPdf(
        html,
        baseUrlOrPath:=targetUrl,  ' Resolves relative asset paths against the original URL
        proxy:="http://svc-account:P%40ssw0rd%21@proxy.corp.local:8080"
    )
    pdf.SaveAs("quarterly-report.pdf")
End Using
$vbLabelText   $csharpLabel

baseUrlOrPath parametresi, göreceli yolların elde edilen HTML'de (<img src="/images/logo.png">, <link href="/css/styles.css">) doğru şekilde çözülmesi için orijinal hedef URL'ye ayarlanır. proxy parametresi, bu varlık isteklerinin render sırasında proxy üzerinden geçmesini sağlar.

Bu kalıp, kimlik doğrulaması yapması gereken sayfalarla da çalışır — alımdan önce uygun çerezler veya başlıklarla HttpClient'i yapılandırın, ardından kimlik doğrulanmış HTML'yi IronPDF'e geçirin. HTTP istek üstbilgisi nasıl yapılır, doğrulanmış istekler için üstbilgi yapılandırmasını kapsar.

Sayfa, render için JavaScript'e (SPAs, React panoları, Angular uygulamaları) güveniyorsa, alınan HTML yalnızca ilk kabuğu içerecektir — istemci tarafı render, HttpClient alımı sırasında çalışmaz. Bu durumlarda, iki seçeneğiniz var: sistem düzeyinde HTTPS_PROXY ortam değişkenlerini ayarlayın (bir sonraki bölümde ele alınacaktır) böylece RenderUrlAsPdf() OS düzeyinde proxy üzerinden yönlendirilir, veya tam render edilmiş HTML'yi şaşasız bir tarayıcı ile alıp, ardından RenderHtmlAsPdf()'ye gönderin.

Docker Konteynerlerde Proxy Nasıl Yapılandırılır?

Konteynerleştirilmiş ortamlarda, yöntem parametreleri yerine sistem seviyesinde proxy yapılandırmasını tercih edebilirsiniz. IronPDF'in Chromium motoru, Linux konteynerlerinin çıkış trafiği yönlendirmesi için kullandığı standart HTTP_PROXY ve HTTPS_PROXY ortam değişkenlerine saygı gösterir.

Bunları Dockerfile'ınıza ayarlayın:

FROM mcr.microsoft.com/dotnet/aspnet:8.0

# System-level proxy for all outbound HTTP/HTTPS traffic
ENV HTTP_PROXY=http://proxy.corp.local:8080
ENV HTTPS_PROXY=http://proxy.corp.local:8080
ENV NO_PROXY=localhost,127.0.0.1,.internal.corp

# Install IronPDF dependencies (fonts, etc.)
RUN apt-get update && apt-get install -y \
    libgdiplus \
    libc6-dev \
    fonts-liberation \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /app
COPY --from=build /app/publish .
ENTRYPOINT ["dotnet", "MyApp.dll"]

Bu ortam değişkenleri ayarlandığında, RenderHtmlAsPdf() proxy parametresi olmadan çağrılabilir — Chromium, sistem düzeyindeki konfigürasyonu otomatik olarak alır.

// No proxy parameter needed — Chromium uses HTTP_PROXY env var
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
// No proxy parameter needed — Chromium uses HTTP_PROXY env var
var renderer = new ChromePdfRenderer();
var pdf = renderer.RenderHtmlAsPdf(htmlContent);
' No proxy parameter needed — Chromium uses HTTP_PROXY env var
Dim renderer As New ChromePdfRenderer()
Dim pdf = renderer.RenderHtmlAsPdf(htmlContent)
$vbLabelText   $csharpLabel

NO_PROXY, dahili kaynaklar için önemlidir. Aksi takdirde, iç hizmetlere (örneğin, yerel bir CSS sunucusu veya Kubernetes kümenizin içinde çalışan bir resim CDN'si gibi) olan istekler gereksiz yere proxy üzerinden yönlendirilecektir. Proxy'yi atlaması gereken ana bilgisayar adlarını ve alan adlarını virgül ile ayırın.

Genel trafik için sistem seviyesinde proxy ve belirli işlemler için farklı bir proxy gerektiğinde, yöntem parametresi ortam değişkeninin önünde yer alır. İhtiyaç duyduğunuzda size render başına kontrol sağlar.

Kubernetes dağıtımları için, proxy yapılandırmasını Dockerfile'a sabitlemek yerine pod spesifikasyonundaki ConfigMap'ler veya ortam değişkenleri aracılığıyla enjekte edin. Bu, farklı proxy yapılandırmalarına sahip ortamlarda aynı konteyner görüntüsünün çalışmasını sağlar:

# Kubernetes pod spec
spec:
  containers:
    - name: pdf-generator
      image: myregistry/pdf-service:latest
      env:
        - name: HTTP_PROXY
          valueFrom:
            configMapKeyRef:
              name: proxy-config
              key: http-proxy
        - name: HTTPS_PROXY
          valueFrom:
            configMapKeyRef:
              name: proxy-config
              key: https-proxy
        - name: NO_PROXY
          value: "localhost,127.0.0.1,.internal.corp"
# Kubernetes pod spec
spec:
  containers:
    - name: pdf-generator
      image: myregistry/pdf-service:latest
      env:
        - name: HTTP_PROXY
          valueFrom:
            configMapKeyRef:
              name: proxy-config
              key: http-proxy
        - name: HTTPS_PROXY
          valueFrom:
            configMapKeyRef:
              name: proxy-config
              key: https-proxy
        - name: NO_PROXY
          value: "localhost,127.0.0.1,.internal.corp"
YAML

Hem ortam değişkeni hem de yöntem parametresi bulunduğunda yöntem parametresi önceliklidir. Size katmanlı bir yapılandırma modeli sunar: alt yapıda varsayılan proxy'yi ayarlayın ve belirli isteklerin farklı bir rota gerektirdiği zaman işlem bazında geçersiz kılın.

CI/CD Boru Hatlarında Proxy Nasıl Kullanılır?

Kurumsal ağlardaki CI/CD koşucuları sıklıkla proxy'ler arkasında bulunur. Proxy URL'sini bir yapı değişkeni veya gizli olarak aktarın — kimlik bilgilerini asla kaynak kontrolde sabitlemeyin.

GitHub Eylemleri:

jobs:
  generate-pdf:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: ${{ secrets.CORP_PROXY_URL }}
      HTTPS_PROXY: ${{ secrets.CORP_PROXY_URL }}
    steps:
      - uses: actions/checkout@v4
      - run: dotnet build
      - run: dotnet test
jobs:
  generate-pdf:
    runs-on: ubuntu-latest
    env:
      HTTP_PROXY: ${{ secrets.CORP_PROXY_URL }}
      HTTPS_PROXY: ${{ secrets.CORP_PROXY_URL }}
    steps:
      - uses: actions/checkout@v4
      - run: dotnet build
      - run: dotnet test
YAML

Azure DevOps:

variables:
  - group: proxy-settings  # Contains PROXY_URL secret

steps:
  - script: |
      export HTTP_PROXY=$(PROXY_URL)
      export HTTPS_PROXY=$(PROXY_URL)
      dotnet run --project PdfGenerator
    displayName: 'Generate PDFs behind proxy'
variables:
  - group: proxy-settings  # Contains PROXY_URL secret

steps:
  - script: |
      export HTTP_PROXY=$(PROXY_URL)
      export HTTPS_PROXY=$(PROXY_URL)
      dotnet run --project PdfGenerator
    displayName: 'Generate PDFs behind proxy'
YAML

Jenkins (Deklaratif Boru Hattı):

environment {
    HTTP_PROXY  = credentials('corp-proxy-url')
    HTTPS_PROXY = credentials('corp-proxy-url')
}

Üç durumda da Chromium, ortam değişkenlerini otomatik olarak okur. Açık denetim tercih ediyorsanız, proxy URL'sini ortamdan okuyun ve yöntem parametresi olarak iletin:

string? proxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
var pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: proxy);
string? proxy = Environment.GetEnvironmentVariable("HTTPS_PROXY");
var pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath: null, proxy: proxy);
Option Strict On



Dim proxy As String = Environment.GetEnvironmentVariable("HTTPS_PROXY")
Dim pdf = renderer.RenderHtmlAsPdf(html, baseUrlOrPath:=Nothing, proxy:=proxy)
$vbLabelText   $csharpLabel

Proxy Sorunları Nasıl Giderilir?

Zaman aşımı hataları: Kurumsal proxy'ler gecikme ekler. 60 saniyelik varsayılandan render zaman aşımını artırın:

renderer.RenderingOptions.Timeout = 120; // seconds
renderer.RenderingOptions.Timeout = 120; // seconds
renderer.RenderingOptions.Timeout = 120 ' seconds
$vbLabelText   $csharpLabel

Bu, ChromePdfRenderOptions.Timeout özelliğidir — Chromium'un sayfa yüklenmesi ve kaynak alımı için ne kadar süre beklemesi gerektiğini kontrol eder. Proxy'niz talepten talepe 5–10 saniyelik bir gecikme eklerse ve sayfa 20'den fazla dış kaynağı yüklüyorsa, 60 saniye yeterli olmayabilir.

SSL durdurma (MITM proxy'ler): Birçok kurumsal proxy, kurumsal ana CA sertifikası kullanarak HTTPS trafiğini çözümleyip yeniden şifreler. Chromium, varsayılan olarak kurumsal CA'ya güvenmediğinden bu bağlantıları reddeder. İki çözüm:

  1. Kurumsal CA sertifikasını konteynerin veya ana makinenin güvenilen kök deposuna yükleyin. Linux'ta: .crt dosyasını /usr/local/share/ca-certificates/ üzerine kopyalayın ve update-ca-certificates komutunu çalıştırın.
  2. Sadece geliştirme ortamı için, sertifika doğrulamayı devre dışı bırakabilirsiniz — ancak bunu üretimde asla yapmayın. Daha güvenli yaklaşım her zaman doğru sertifikayı yüklemektir.

NTLM kimlik doğrulaması: Satır içi user:pass@host formatı, Temel ve Özet proxy kimlik doğrulamasını destekler. NTLM (Windows merkezli kurumsal ortamlarda yaygın) proxy URL dizisi aracılığıyla desteklenmez. Tavsiye edilen geçici çözüm, ana makinede veya yan araba konteyneri olarak CNTLM gibi yerel bir NTLM'den Temel'e aktarıcı proxy çalıştırmaktır. NTLM kimlik bilgilerinizi CNTLM ile yapılandırın, ardından IronPDF'i http://localhost:3128 (CNTLM'in varsayılan portu) noktasına yönlendirin.

Boş PDF veya eksik varlıklar: Eğer PDF işlenmiş ama görüntüler/CSS eksikse, HTML'niz proxy'nin engellediği veya farklı bir proxy yoluna gereksinim duyan kaynakları referans alıyor olabilir. baseUrlOrPath parametresinin proxy üzerinden doğru şekilde çözüldüğünü doğrulayın ve erişim günlüklerinde 403 veya 407 yanıtlarını kontrol edin.

Yerel varlıklar için proxy geçişi: HTML'niz, yerel varlıklar (paketlenmiş görüntüler, dahili CSS) ve uzaktaki kaynaklar (CDN yazı tipleri, harici betikler) arasında bir karışım referans alıyorsa, proxy yalnızca uzaktaki talepleri ele almalıdır. baseUrlOrPath'yi, dosya sistemi varlıkları için yerel bir dizine ayarlayın ve proxy'ye yalnızca ağ isteklerini yönlendirin. Bu, yerel dosya okumalarının gereksiz yere proxy üzerinden yönlendirilmesini önler.

Bağlantı sorunlarını teşhis etme: Proxy dizeniz doğru mu emin olmak için IronPDF ile kullanmadan önce basit bir HttpClient isteği ile test edin:

var proxy = new WebProxy("http://proxy.corp.local:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler);

var response = await client.GetAsync("https://httpbin.org/ip");
Console.WriteLine(await response.Content.ReadAsStringAsync());
// Should return the proxy's external IP, not your machine's IP
var proxy = new WebProxy("http://proxy.corp.local:8080");
var handler = new HttpClientHandler { Proxy = proxy, UseProxy = true };
using var client = new HttpClient(handler);

var response = await client.GetAsync("https://httpbin.org/ip");
Console.WriteLine(await response.Content.ReadAsStringAsync());
// Should return the proxy's external IP, not your machine's IP
Imports System
Imports System.Net
Imports System.Net.Http

Dim proxy As New WebProxy("http://proxy.corp.local:8080")
Dim handler As New HttpClientHandler With {.Proxy = proxy, .UseProxy = True}
Using client As New HttpClient(handler)
    Dim response = Await client.GetAsync("https://httpbin.org/ip")
    Console.WriteLine(Await response.Content.ReadAsStringAsync())
    ' Should return the proxy's external IP, not your machine's IP
End Using
$vbLabelText   $csharpLabel

Bu başarılı olursa ancak IronPDF yine de başarısız olursa, sorun büyük olasılıkla SSL kesintisi veya vekil sunucunuz ile Chromium'un CONNECT tünellemesi arasında bir protokol uyumsuzluğudur. Vekil sunucunun HTTPS kaynakları için HTTP CONNECT'i destekleyip desteklemediğini kontrol edin - bazı vekil sunucular tünellemelere izin vermek için açıkça yapılandırılmayı gerektirebilir.

Sonraki Adımlar

IronPDF'deki proxy desteği RenderHtmlAsPdf() üzerinde bir yöntem parametresidir — proxy dizenizi iletin, ve Chromium motoru tüm HTTP trafiğini onun üzerinden yönlendirir. RenderUrlAsPdf() senaryoları için, HTML'yi bir HttpClient ve WebProxy ile önce alın. Konteynerler ve CI/CD için, sistem düzeyinde HTTPS_PROXY ortam değişkenleri, kod değişikliklerine gerek kalmadan altyapı düzeyinde kontrol sağlar.

Web sayfası kimlik doğrulaması (vekil kimlik doğrulamasından farklı) için kimlik doğrulama nasıl yapılır konusunu, özel başlıklar için HTTP istek başlık rehberini ve zaman aşımı ve performans ayarlamaları için görüntüleme seçenekleri referansı keşfedin.

Lisanslama seçeneklerini görüntüleyin $749'dan başlar. ChromePdfRenderer API referansı, her yöntem yüklemesini belgeler ve ChromePdfRenderOptions referansı tüm yapılandırılabilir özellikleri kapsar.

Sıkça Sorulan Sorular

PDF işleme için C#'da bir proxy sunucu nasıl yapılandırılır?

C#'da PDF işleme için bir proxy sunucu yapılandırmak için, IronPDF'teki RenderHtmlAsPdf metodunu çağırırken proxy parametresini kullanabilirsiniz. Bu, web kaynaklarına erişim için proxy ayarlarınızı belirtmenize olanak tanır.

IronPDF ile proxy kullanmanın amacı nedir?

IronPDF ile proxy kullanmak, özellikle internet erişiminin kısıtlı olduğu, örneğin güvenlik duvarlarının arkasında veya kurumsal ağlarda olan ortamlarda PDF’leri işlerken ağ isteklerini yönetmeye yardımcı olur.

IronPDF doğrulamalı proxy'leri yönetebilir mi?

Evet, IronPDF doğrulamalı proxy'leri yönetebilir. C# kodunuza proxy ayarlarıyla birlikte gerekli kimlik doğrulama bilgilerini sağlamanız gerekir.

IronPDF bir Docker konteynerinde bir proxy ile kullanılabilir mi?

Evet, IronPDF bir Docker konteynerinde bir proxy ile çalışacak şekilde yapılandırılabilir. Proxy ayarlarını geçirmek için Docker ortam değişkenlerinin doğru bir şekilde ayarlandığından emin olun.

IronPDF ile proxy sorunlarını nasıl çözebilirim?

IronPDF ile proxy sorunlarını çözmek için, proxy ayarlarınızı kontrol edin, kimlik doğrulama bilgilerin doğru olduğundan emin olun ve ağ erişilebilirliğini doğrulayın. Günlükler üzerindeki hata mesajlarını gözden geçirmek de sorunu tanımlamaya yardımcı olabilir.

IronPDF proxy yapılandırmaları ile CI/CD hatlarına entegre edilebilir mi?

Evet, IronPDF proxy yapılandırmaları ile CI/CD hatlarına entegre edilebilir. PDF işleme süreci sırasında gerekli proxy ayarlarını geçirmek için geçerli yapım ortamının kurulu olduğundan emin olun.

Kurumsal ortamlarda IronPDF ile proxy kullanmanın faydaları nelerdir?

Kurumsal ortamlarda IronPDF ile proxy kullanmak, güvenliği artırabilir, internet erişimini kontrol edebilir ve bant genişliği kullanımını yönetebilir, böylece kurumsal BT politikalarına uyum sağlamayı daha kolay hale getirir.

Darrius Serrant
Tam Yığın Yazılım Mühendisi (WebOps)

Darrius Serrant, Miami Üniversitesi'nden Bilgisayar Bilimleri lisans derecesine sahiptir ve Iron Software'de Tam Yığın WebOps Pazarlama Mühendisi olarak çalışmaktadır. Küçük yaşlardan itibaren kodlamaya ilgi duyan Darrius, bilişimi hem gizemli hem de erişilebilir buldu ve onu yaratıcılık ve problem çö...

Daha Fazlasını Oku
Başlamaya Hazır mısınız?
Nuget Indirmeler 18,332,619 | Sürüm: 2026.4 yeni yayınlandı
Still Scrolling Icon

Hala Kaydiriyor musunuz?

Hızlı bir kanit mi istiyorsunuz? PM > Install-Package IronPdf
bir örnek çalıştır HTML'nizin PDF olduğunu izleyin.