OK、簡単な質問ですが、その前に説明が必要です。
System.Net.WebClient (または WebRequest、同じ結果) を使用して、プロキシ サーバー経由で https ページをダウンロードしようとしています。
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApplication3
{
static class Program
{
static void Main(string[] args)
{
var wc = new WebClient();
wc.Proxy = new WebProxy("MyProxyAddress") { UseDefaultCredentials = true };
wc.Headers.Add("xyz", "abc");
try
{
Console.WriteLine(wc.DownloadString("https://www.google.co.nz"));
}
catch (WebException wex)
{
if (wex.Response != null)
using (var reader = new StreamReader(wex.Response.GetResponseStream()))
Console.WriteLine(reader.ReadToEnd());
}
}
}
}
この時点で Fiddler を起動すると、リクエストが次のように表示されます。Fiddler を Require Proxy Authentication に設定したことに注意してください。
CONNECT www.google.co.nz:443 HTTP/1.1
Host: www.google.co.nz
Proxy-Connection: Keep-Alive
応答は
HTTP/1.1 407 Proxy Auth Required
Connection: close
、 予想通り。アドレスを https://... から http://... に変更すると、これが表示されます。xyz ヘッダーが表示されていることに注意してください。
GET http://www.google.co.nz/ HTTP/1.1
xyz: abc
Host: www.google.co.nz
Proxy-Connection: Keep-Alive
私が通過しているプロキシがユーザーエージェントを必要とする場合を除いて、すべて問題ありません。User-Agent を含むすべてのヘッダーがリクエストから削除されるため、プロキシはリクエストを拒否します。User-Agent ヘッダーをリクエストに強制するように Fiddler を構成すると、すべて正常に機能します。
では、私のヘッダーが CONNECT リクエストに含まれていないのはなぜですか? これは MS のバグですか、それとも何か不足していますか?