フリーの認証なしプロキシを使用したHttpClientのテストをしていたのですが正常に動作せず、
かならずリモート名が解決できない(NameResolutionFailure)でクラッシュします。
いくつかのサイトで試しましたがいずれも同じ結果でした。
いずれのサイトもプロキシを使用している・していないケースで試したのでプロキシが原因なのは間違いがありません。
必要な設定はできているはずですが、何が間違っているのでしょうか?
ご教示いただけますと幸いです。
C#
1 public static async void Test() 2 { 3#if true //プロキシを使用する場合 4 //IPからホスト名を取得 5 var ip = "51.158.67.190"; 6 var port = 8118; 7 var host = Dns.GetHostEntry(ip)?.HostName; 8 if (String.IsNullOrEmpty(host)) 9 { 10 return; 11 } 12 13 //ホストとポートでプロキシ作成 14 var proxyCore = new WebProxy(host, port); 15 bool useProxy = true; 16#else //プロキシを使用しない場合 17 WebProxy proxyCore = null; 18 bool useProxy = false; 19#endif 20 //ハンドラー作成 21 var hc = new HttpClientHandler() 22 { 23 Proxy = proxyCore, 24 UseProxy = useProxy, 25 PreAuthenticate = false, 26 UseDefaultCredentials = false, 27 UseCookies = true, 28 CookieContainer = new CookieContainer(), 29 }; 30 31 //クライアント作成 32 var httpClient = new HttpClient(hc); 33 34 //chrome上でアクセスするときと同じ情報をヘッダーに設定 35 String url = "https://www.yahoo.co.jp/"; 36 httpClient.DefaultRequestHeaders.Accept.ParseAdd("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9"); 37 httpClient.DefaultRequestHeaders.AcceptEncoding.ParseAdd("gzip, deflate, br"); 38 httpClient.DefaultRequestHeaders.AcceptLanguage.ParseAdd("ja,en-US;q=0.9,en;q=0.8"); 39 httpClient.DefaultRequestHeaders.CacheControl = new CacheControlHeaderValue() { NoCache = true }; 40 httpClient.DefaultRequestHeaders.Add("pragma", "no-cache"); 41 httpClient.DefaultRequestHeaders.Add("sec-fetch-mode", "navigate"); 42 httpClient.DefaultRequestHeaders.Add("sec-fetch-site", "none"); 43 httpClient.DefaultRequestHeaders.Add("upgrade-insecure-requests", "1"); 44 httpClient.DefaultRequestHeaders.UserAgent.ParseAdd("Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.130 Safari/537.36"); 45 46 using (var req = new System.Net.Http.HttpRequestMessage(HttpMethod.Get, url)) 47 { 48 try 49 { 50 using (var response = await httpClient.SendAsync(req)) 51 { 52 if (response.StatusCode == System.Net.HttpStatusCode.OK) 53 { 54 //gzipでの読み込み 55 using (Stream stream = await response.Content.ReadAsStreamAsync()) 56 using (Stream decompressed = new GZipStream(stream, CompressionMode.Decompress)) 57 using (StreamReader reader = new StreamReader(decompressed)) 58 { 59 var ret = reader.ReadToEnd(); 60 } 61 } 62 } 63 } 64 catch (Exception ex) 65 { 66 Console.WriteLine(ex); 67 } 68 } 69 }
System.Net.Http.HttpRequestException: An error occurred while sending the request. ---> System.Net.WebException: リモート名を解決できませんでした。: '190-67-158-51.rev.cloud.scaleway.com' 場所 System.Net.HttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 場所 System.Net.Http.HttpClientHandler.GetResponseCallback(IAsyncResult ar) --- 内部例外スタック トレースの終わり --- 場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所 System.Net.Http.HttpClient.<FinishSendAsyncBuffered>d__58.MoveNext() --- 直前に例外がスローされた場所からのスタック トレースの終わり --- 場所 System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() 場所 System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) 場所 System.Runtime.CompilerServices.TaskAwaiter`1.GetResult() 場所 FlowLib.HttpEx.HttpUtil.<Test>d__9.MoveNext() 場所 F:\プロ・Oラム\FW\FlowLib\HttpEx\HttpUtil.cs:行 237

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2020/02/27 23:40
退会済みユーザー
2020/02/27 23:53 編集
2020/02/28 13:30
2020/03/02 06:35