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

如何捕获PowerShell中Invoke-WebRequest生成的原始HTTP请求?

获取PowerShell Invoke-WebRequest的原始请求内容

方法1:启用Debug参数输出请求细节

Invoke-WebRequest自带-Debug参数,开启后会打印底层请求的关键信息,包括请求行、所有请求头、代理交互逻辑,足够和Go的请求做对比:

Invoke-WebRequest -Uri "你的API地址" -Headers @{Authorization="Bearer 你的JWT"} -Debug

方法2:自定义.NET Handler捕获完整请求

PowerShell的Invoke-WebRequest基于.NET的HttpClient,可直接在PowerShell中编写自定义Handler,拦截并输出完整请求结构,和Invoke-WebRequest的底层逻辑完全一致:

Add-Type -TypeDefinition @"
using System;
using System.Net;
using System.Net.Http;
using System.Text;

public class RequestLoggingHandler : DelegatingHandler
{
    protected override System.Threading.Tasks.Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken)
    {
        // 输出请求行
        Console.WriteLine($"Request: {request.Method} {request.RequestUri}");
        // 输出所有请求头
        foreach (var header in request.Headers)
        {
            Console.WriteLine($"{header.Key}: {string.Join(", ", header.Value)}");
        }
        // GET请求无请求体,若为POST可取消注释以下代码
        // if (request.Content != null)
        // {
        //     var content = request.Content.ReadAsStringAsync().Result;
        //     Console.WriteLine($"Content: {content}");
        // }
        return base.SendAsync(request, cancellationToken);
    }
}
"@

# 构建和Invoke-WebRequest行为一致的HttpClient
$handler = New-Object RequestLoggingHandler
$handler.InnerHandler = New-Object System.Net.Http.HttpClientHandler
# 启用系统代理,和PowerShell默认行为对齐
$handler.InnerHandler.UseProxy = $true
$handler.InnerHandler.Proxy = [System.Net.WebRequest]::DefaultWebProxy
$handler.InnerHandler.Proxy.Credentials = [System.Net.CredentialCache]::DefaultCredentials

$client = New-Object System.Net.Http.HttpClient($handler)
$client.DefaultRequestHeaders.Authorization = New-Object System.Net.Http.Headers.AuthenticationHeaderValue("Bearer", "你的JWT")
# 发送请求并打印日志
$response = $client.GetAsync("你的API地址").Result

方法3:校验代理配置一致性

既然环境存在代理,可先确认Go和PowerShell的代理配置是否完全匹配:

  • 在PowerShell中查看系统代理:
[System.Net.WebRequest]::DefaultWebProxy.GetProxy("你的API地址")
  • 在Go中打印当前使用的代理:
apiURL, _ := url.Parse("你的API地址")
proxyURL, err := http.ProxyFromEnvironment(&http.Request{URL: apiURL})
if err == nil {
    fmt.Printf("Go使用的代理地址: %s\n", proxyURL)
}

确保两者使用的代理地址、凭证逻辑完全一致。


内容的提问来源于stack exchange,提问作者Chris-AF

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 01:17:02