HTTP代理剥离授权标头需要cooke

时间:2017-09-03 04:44:28

标签: c# cookies proxy dotnet-httpclient

我正在尝试在需要基本身份验证的C#应用​​程序中使用Web代理后面的REST API。

我使用Postman Chrome应用程序测试了我的凭据,并验证了它们的工作原理。但是,当我运行我的C#应用​​程序时,我收到401 Unauthorized响应。

在查看Postman请求的一些痕迹并在我的C#应用​​程序中使用http://httpbin.org之后,我认为发生的事情是我所背后的Web代理不转发授权标头,因为我的请求是错过了一个cookie(我认为)是由更智能的Web客户端设置的(例如,Postman,它建立在Chrome之上)。我可以在Postman网络跟踪中看到它正在发送一个看起来与代理相关的cookie。

我不知道如何在我的C#应用​​程序中复制它,因为我使用的是相当高级的API。任何帮助将不胜感激:

更新

我能够通过复制我在跟踪中看到的cookie并将其添加到我的请求中(通过将其插入if modelformset.is_valid(): modelformset.save() )来使其工作。但是,我不确定如何自动完成。 Chrome必须以某种方式获取此Cookie值并存储它。有没有办法可以让我的应用程序也这样做?

CookieStore

1 个答案:

答案 0 :(得分:0)

看起来你已经正确"启用" Cookie,因此您应该在每次后续请求时自动发送回复的任何内容,如果您为每个请求重复使用相同的HttpClient实例

作为旁注,如果您不介意小型库依赖,Flurl [免责声明:我是作者]会大大简化您的代码:

var client = new FlurlClient().EnableCookies();

var response = await HTTP_URL
    .WithClient(client)
    .WithBasicAuth(USER, PASS)
    .PostUrlEncodedAsync(new {
        field1 = "value1",
        field2 = "value2",
    });