You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用cURL/WGET请求目标URL触发HTTP 500错误,浏览器访问正常

解决curl/wget等工具访问PDF链接返回500错误的问题

这种情况我碰到过好几次,几乎可以肯定是请求头不完整导致的。浏览器在发起请求时会自动附带一堆标准HTTP头(比如User-Agent、Accept、Referer等),而curl/wget这类工具默认的请求头非常精简,服务器的后端逻辑可能依赖这些头来验证请求的合法性,缺少的话就会抛出500错误。

快速验证方法:复制浏览器的请求头到curl

  1. 打开浏览器的开发者工具(按F12),切换到「Network」面板
  2. 在浏览器中打开目标PDF链接,找到对应的请求条目
  3. 右键该请求,选择「Copy」→「Copy as cURL (bash)」
  4. 把复制的命令粘贴到终端执行,应该就能正常下载PDF了

精简必要的请求头

复制的cURL命令会包含很多冗余头,我们可以逐步删除测试,找出服务器必需的几个关键头。针对你的情况,至少需要以下几个:

  • User-Agent:模拟浏览器客户端标识
  • Accept:告诉服务器我们能接受的内容类型
  • Referer:验证请求来源(很多服务器会检查这个防止盗链)

简化后的curl命令示例

curl -H "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36" \
     -H "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7" \
     -H "Referer: https://insolventies.rechtspraak.nl/" \
     -o document.pdf \
     https://insolventies.rechtspraak.nl/Services/VerslagenService/getPdf/01_obr_18_65_F_V_02

应用到其他编程语言

PHP cURL实现

$pdfUrl = 'https://insolventies.rechtspraak.nl/Services/VerslagenService/getPdf/01_obr_18_65_F_V_02';
$ch = curl_init($pdfUrl);

// 设置必要的请求头
curl_setopt($ch, CURLOPT_HTTPHEADER, [
    'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36',
    'Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7',
    'Referer: https://insolventies.rechtspraak.nl/'
]);

// 其他必要配置
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 处理可能的重定向

$pdfContent = curl_exec($ch);
if (curl_errno($ch)) {
    die('请求失败:' . curl_error($ch));
}

// 保存PDF到本地
file_put_contents('insolvency_document.pdf', $pdfContent);
curl_close($ch);

ASP.NET HttpClient实现

using System;
using System.Net.Http;
using System.Threading.Tasks;

class PdfDownloader
{
    static async Task Main(string[] args)
    {
        var targetUrl = "https://insolventies.rechtspraak.nl/Services/VerslagenService/getPdf/01_obr_18_65_F_V_02";
        
        using var httpClient = new HttpClient();
        // 添加必要的请求头
        httpClient.DefaultRequestHeaders.UserAgent.ParseAdd(
            "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36"
        );
        httpClient.DefaultRequestHeaders.Accept.ParseAdd(
            "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7"
        );
        httpClient.DefaultRequestHeaders.Referrer = new Uri("https://insolventies.rechtspraak.nl/");

        try
        {
            var response = await httpClient.GetAsync(targetUrl);
            response.EnsureSuccessStatusCode(); // 确保请求成功
            
            var pdfBytes = await response.Content.ReadAsByteArrayAsync();
            await System.IO.File.WriteAllBytesAsync("insolvency_document.pdf", pdfBytes);
            Console.WriteLine("PDF下载成功!");
        }
        catch (HttpRequestException ex)
        {
            Console.WriteLine($"请求出错:{ex.Message}");
        }
    }
}

额外排查点

如果添加上述头后仍然报错,可以检查:

  • 浏览器请求中是否包含Cookie头(如果需要会话验证的话),可以同样复制到请求中
  • 服务器是否有IP限制,但你已经试过多个系统,这个可能性较低

内容的提问来源于stack exchange,提问作者Danny B

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.26 10:45:26