如何在 C# 中為 PDF 渲染設定代理伺服器

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

IronPDF 中,代理伺服器設定是 RenderHtmlAsPdf() 重載方法參數,而非 ChromePdfRenderOptions 的屬性。 此區別至關重要,因為 RenderUrlAsPdf() 完全不具備代理參數,這意味著當您需要渲染位於企業代理伺服器後方的即時網址時,必須採用不同的處理策略。 若傳入 null(預設值),IronPDF 將直接建立連線。

本指南涵蓋了您在生產環境中可能遇到的所有代理伺服器情境:直接代理字串、需驗證的企業代理伺服器、RenderUrlAsPdf 解決方案、Docker 容器配置、CI/CD 管道整合,以及 SSL 攔截與 NTLM 驗證的常見疑難排解模式。

立即開始 30天試用,在您的環境中測試代理伺服器設定。

快速入門:透過代理伺服器渲染 PDF

IronPDF 的 proxy 選項參數可協助您轉換透過企業代理伺服器傳送的即時網頁。 使用此程式碼片段快速上手。

  1. 使用NuGet套件管理器安裝https://www.nuget.org/packages/IronPdf

    PM > Install-Package IronPdf
  2. 複製並運行這段程式碼。

    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. 部署到您的生產環境進行測試

    今天就在您的專案中開始使用免費試用IronPDF

    arrow pointer

簡化工作流程(3 個步驟)

  1. 透過 NuGet 安裝 IronPDF:Install-Package IronPdf
  2. 將代理字串作為第三個參數傳遞給 RenderHtmlAsPdf()
  3. 格式:http(s)://host:porthttp(s)://user:pass@host:port(適用於需驗證的代理伺服器)

如何將代理伺服器傳遞給 RenderHtmlAsPdf?

Proxy 參數是四個方法簽名中可選的 string

// 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

當此參數設定為 null(預設值)時,IronPDF 的 Chromium 引擎會直接連線至外部資源——即您 HTML 文件中引用的樣式表、圖片、字型及 JavaScript 檔案。 當您提供代理伺服器字串時,渲染引擎發出的所有 HTTP/HTTPS 請求都會透過該代理伺服器進行路由。

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

代理字串同時支援 http://https:// 兩種格式。 當代理伺服器本身要求應用程式與代理伺服器之間的連線必須使用 TLS 加密時,請使用 https://。 此處的"方案"指的是代理連線,而非最終資源——http:// 代理仍可透過 CONNECT 隧道傳輸來擷取 https:// 資源。

靜態方法的變體接受相同的代理參數,這對於在主控台應用程式或單元測試中進行一次性渲染非常有用:

// 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

重要提示ProxyAddress 物件上不存在 ChromePdfRenderOptions 屬性。 不要在那裡尋找。 該代理僅是 RenderHtmlAsPdfStaticRenderHtmlAsPdf 重載方法中的參數。

如何透過企業代理伺服器進行驗證?

大多數Enterprise級代理伺服器都需要憑證。 您可以使用 http(s)://username:password@host:port 格式,將其直接嵌入代理伺服器的 URL 中:

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

請對密碼中的特殊字元進行 URL 編碼。若您的密碼包含 / 或其他保留的 URI 字元,必須進行百分比編碼。 常用編碼:

字元 已編碼
@ %40
# %23
: %3A
/ %2F
! %21
% %25

請使用 Uri.EscapeDataString() 來程式化地編碼密碼:

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

請勿將代理伺服器驗證與網頁驗證混淆。ChromeHttpLoginCredentials.NetworkUsernameNetworkPassword 屬性是用來對渲染中的網頁進行驗證(透過 NTLM/Negotiate 與網站進行驗證),而非對代理伺服器進行驗證。 關於代理伺服器驗證,憑證應如上所述放入代理伺服器 URL 字串中。

如何處理代理伺服器後方的 URL?

RenderUrlAsPdf() 不接受代理參數。 這是 API 設計上的刻意選擇 — RenderUrlAsPdf 會引導 Chromium 瀏覽至特定 URL,而該導航的代理伺服器設定處理方式,與 HTML 渲染期間的資源載入處理方式不同。

建議的解決方案:使用配置了 WebProxyHttpClient 自行擷取 HTML,然後將 HTML 字串傳遞給 RenderHtmlAsPdf() 並設定 proxy 參數(以便被引用的資源 — 圖片、CSS、字型 — 也能透過代理伺服器路由)。

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 參數設定為原始目標 URL,以便從抓取的 HTML 中解析相對路徑 (<img src="/images/logo.png">, <link href="/css/styles.css">) 時能正確解析。 proxy 參數可確保在渲染過程中,這些資源請求會透過代理伺服器進行路由。

此模式亦適用於需經過身份驗證的頁面——在擷取前,請將 HttpClient 設定為適當的 Cookie 或標頭,然後將經過驗證的 HTML 傳遞給 IronPDF。 HTTP 請求標頭操作指南涵蓋了經過驗證請求的標頭設定。

若頁面仰賴 JavaScript 進行渲染(如單頁應用程式、React 儀表板、Angular 應用程式),抓取到的 HTML 僅會包含初始骨架——在 HttpClient 抓取過程中,客戶端渲染將不會執行。 針對此類情況,您有兩種選擇:設定系統層級的 HTTPS_PROXY 環境變數(詳見下一節),使 RenderUrlAsPdf() 在作業系統層級透過代理伺服器進行路由;或者使用無頭瀏覽器先擷取完全渲染的 HTML,再將其傳遞給 RenderHtmlAsPdf()

如何在 Docker 容器中設定代理伺服器?

在容器化環境中,您可能更傾向於採用系統層級的代理伺服器設定,而非逐個方法的參數設定。 IronPDF 的 Chromium 引擎支援 Linux 容器用於出站流量路由的標準 HTTP_PROXYHTTPS_PROXY 環境變數。

請在您的 Dockerfile 中設定以下內容:

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"]

設定這些環境變數後,您即可在不指定 proxy 參數的情況下呼叫 RenderHtmlAsPdf() — Chromium 會自動採用系統層級的設定:

// 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 對內部資源至關重要。 若未設定此選項,對內部服務(例如 Kubernetes 叢集內運行的本地 CSS 伺服器或圖片 CDN)的請求將不必要地經由代理伺服器路由。 請以逗號分隔應繞過代理伺服器的主機名稱與網域。

若您同時需要用於一般流量的系統層級代理伺服器,以及用於特定渲染的另一組代理伺服器,則方法參數的設定將優先於環境變數。 這讓您能在需要時進行逐次渲染控制。

對於 Kubernetes 部署,請透過 ConfigMaps 或環境變數在 pod 規格中注入代理伺服器設定,而非將其硬編碼在 Dockerfile 中。此舉可讓相同的容器映像在具有不同代理伺服器設定的環境中正常運作:

# 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

當環境變數與方法參數同時存在時,方法參數具有優先權。 這為您提供了一個分層配置模型:在基礎架構層設定預設代理伺服器,並在特定請求需要不同路由時,於每次渲染時進行覆寫。

您如何在 CI/CD 管道中處理代理伺服器?

企業網路中的 CI/CD 執行器通常位於代理伺服器之後。 請將代理伺服器網址作為建置變數或機密資訊傳遞 — 切勿在原始碼控制中硬編碼憑證。

GitHub Actions:

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(宣告式管線):

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

在上述三種情況下,Chromium 都會自動讀取環境變數。 若您希望直接控制,請從環境中讀取代理伺服器網址,並將其作為方法參數傳入:

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

如何排除代理伺服器問題?

超時錯誤:企業代理伺服器會增加延遲。 將渲染超時從預設的 60 秒延長:

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

這是 ChromePdfRenderOptions.Timeout 屬性 —— 它控制 Chromium 等待頁面載入與資源擷取的總時間長度。 若您的代理伺服器每筆請求會增加 5 至 10 秒的延遲,且頁面需載入 20 個以上的外部資源,60 秒可能不足以完成載入。

SSL 攔截(MITM 代理):許多企業代理伺服器會使用企業根 CA 憑證來解密並重新加密 HTTPS 流量。 Chromium 會拒絕這些連線,因為它預設不信任該企業憑證授權機構。 兩種解決方案:

  1. 將企業 CA 憑證安裝至容器或主機的受信任根儲存庫中。 在 Linux 上:將 .crt 複製到 /usr/local/share/ca-certificates/,並執行 update-ca-certificates
  2. 僅限開發環境中,您可以停用憑證驗證 —— 但切勿在正式環境中執行此操作。 最安全的做法始終是安裝正確的憑證。

NTLM 驗證:內嵌的 user:pass@host 格式支援 Basic 和 Digest 代理伺服器驗證。 代理伺服器的 URL 字串不支援 NTLM(常見於以 Windows 為核心的 Enterprise 環境)。 解決方案是在主機上或作為 sidecar 容器,執行如 CNTLM 般的本地 NTLM 轉 Basic 轉發代理。 請使用您的 NTLM 憑證設定 CNTLM,然後將 IronPDF 指向 http://localhost:3128(CNTLM 的預設埠)。

空白 PDF 或資源缺失:若 PDF 能正常顯示但圖片/CSS 缺失,表示您的 HTML 引用了被代理伺服器封鎖的資源,或需要不同的代理路徑。 請確認 baseUrlOrPath 參數能透過代理伺服器正確解析,並檢查代理伺服器的存取日誌中是否有 403 或 407 回應。

本地資源的代理伺服器繞過:若您的 HTML 同時引用了本地資源(封裝的圖片、內嵌 CSS)與遠端資源(CDN 字型、外部腳本),代理伺服器僅需處理遠端請求。 將 baseUrlOrPath 設定為本地目錄以存放檔案系統資源,並讓代理伺服器僅處理網路請求。 這可避免不必要地將本地檔案讀取透過代理伺服器進行。

連線診斷:在使用 IronPDF 之前,請先透過簡單的 HttpClient 請求測試您的代理伺服器字串是否正確:

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

若此操作成功但 IronPDF 仍無法運作,問題很可能是 SSL 攔截,或是您的代理伺服器與 Chromium 的 CONNECT 隧道之間存在通訊協定不符。 請確認代理伺服器是否支援透過 HTTP CONNECT 存取 HTTPS 資源 — 部分代理伺服器需要明確設定才能允許隧道傳輸。

後續步驟

IronPDF 中的代理伺服器支援是 RenderHtmlAsPdf() 上的方法參數 — 傳入代理伺服器字串後,Chromium 引擎便會將所有 HTTP 流量導向該代理伺服器。 針對 RenderUrlAsPdf() 情境,請先使用 HttpClientWebProxy 擷取 HTML。 針對容器與 CI/CD,系統層級的 HTTPS_PROXY 環境變數可讓您在無需修改程式碼的情況下,獲得基礎架構層級的控制權。

請參閱網頁驗證(有別於代理伺服器驗證)的登入與驗證操作指南、自訂標頭的 HTTP 請求標頭指南,以及用於超時與效能調校的渲染選項參考

查看起價 $749 的授權方案ChromePdfRenderer API 參考文件詳述了每個方法的重載,而 ChromePdfRenderOptions 參考文件則涵蓋了所有可配置的屬性。

常見問題解答

如何在 C# 中為 PDF 渲染設定代理伺服器?

若要在 C# 中為 PDF 渲染設定代理伺服器,可在 IronPDF 中呼叫 RenderHtmlAsPdf 方法時使用 proxy 參數。此功能可讓您指定存取網路資源的代理設定。

在 IronPDF 中使用代理伺服器的目的是什麼?

在渲染 PDF 時搭配 IronPDF 使用代理伺服器,有助於管理網路請求,特別是在網路存取受限的環境中,例如位於防火牆後方或企業內部網路中。

IronPDF 能否處理需驗證的代理伺服器?

是的,IronPDF 支援需要驗證的代理伺服器。您需要在 C# 程式碼中,於代理伺服器設定之外,一併提供必要的驗證憑證。

是否可以在 Docker 容器中透過代理伺服器使用 IronPDF?

是的,IronPDF 可以設定為在 Docker 容器中透過代理伺服器運作。請確保 Docker 環境變數已正確設定,以傳遞代理伺服器設定。

如何排除 IronPDF 的代理伺服器問題?

若要排除 IronPDF 的代理伺服器問題,請檢查您的代理伺服器設定,確保驗證資訊正確無誤,並確認網路連線狀態。檢視日誌中的錯誤訊息也有助於找出問題所在。

IronPDF 能否在具備代理伺服器設定的 CI/CD 管道中使用?

是的,IronPDF 可透過代理設定整合至 CI/CD 管道中。請確保您的建置環境已設定妥當,能在 PDF 渲染過程中傳遞必要的代理設定。

在 Enterprise 環境中,搭配 IronPDF 使用代理伺服器有哪些好處?

在 Enterprise 環境中搭配 IronPDF 使用代理伺服器,可強化安全性、控制網際網路存取並管理頻寬使用,從而更輕鬆地符合組織的 IT 政策。

Darrius Serrant
全棧軟件工程師 (WebOps)

Darrius Serrant 擁有邁阿密大學計算機科學學士學位,目前任職於 Iron Software 的全栈 WebOps 市場營銷工程師。從小就迷上編碼,他認為計算既神秘又可接近,是創意和解決問題的完美媒介。

在 Iron Software,Darrius 喜歡創造新事物,並簡化複雜概念以便於理解。作為我們的駐場開發者之一,他也自願教學生,分享他的專業知識給下一代。

對 Darrius 來說,工作令人滿意因為它被重視且有實際影響。

準備好開始了嗎?
Nuget 下載 18,332,619 | 版本: 2026.4 剛剛發布
Still Scrolling Icon

還在捲動嗎?

想要快速證明? PM > Install-Package IronPdf
執行範例 觀看您的 HTML 變成 PDF。