実現したいこと
VB.Netにてサイトのデータ取得プログラムを作成しています
発生している問題・エラーメッセージ
同一ドメイン配下のうちいくつかの特定のページのみ、リクエストに対して下記の通り503エラーが返却されます。
各種ブラウザによる当該ページからのデータ取得は問題なく正常に実行できます。
(Chrome、Edghにて確認)
リモート サーバーがエラーを返しました: (503) サーバーを使用できません キャッチしたWebExceptionのプロパティ(抜粋) HResult -2146233079 Status ProtocolError {7} WebException.Responseプロパティ(抜粋) CharacterSet "ISO-8859-1" ContentEncoding "" ContentLength 263 ContentType "text/html" Cookies {System.Net.CookieCollection} Headers {Connection: close Content-Length: 263 Content-Type: text/html Date: Fri, 24 Sep 2021 17:03:04 GMT ETag:"5c1b3a08-107" Server:nginx IsFromCache:False IsMutuallyAuthenticated:False LastModified:#9/25/2021 02:05:16 AM# Method:"GET" ProtocolVersion:{1.1} ResponseUri:{取得したいサイトURLで、誤りはありません} Server:"nginx" StatusCode:ServiceUnavailable {503} StatusDescription:"Service Temporarily Unavailable" SupportsHeaders:True
おそらくリクエストヘッダに何らかの問題があると考えていますが、特定には至りませんでした。
リクエストヘッダ
Host、Cookie等は除外していますが、誤りはありません。
下記は作成中のプログラムによるリクエストヘッダ内容です(503エラーが返却されます)。
Content-Type: application/x-www-form-urlencoded;charset=utf-8 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.9 User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36 Accept-Language: ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7 X-Requested-With: statusText Upgrade-Insecure-Requests: 1 sec-ch-ua-platform: Windows Sec-Fetch-Dest: document Sec-Fetch-Mode: cors Sec-Fetch-Site: same-origin Sec-Fetch-User: ?1 sec-ch-ua: Chromium;v=94,Google Chrome;v=94,;Not A Brand;v=99
下のようにSystem.Net.WebClientを継承したクラスを使い、GetWebRequestをオーバーライドしてヘッダをセットしています。
他のページに対しても同じ内容でリクエストを送信しますが、問題なくデータの取得ができています。
VB.NET
1 Protected Overrides Function GetWebRequest(address As Uri) As Net.WebRequest 2 3 Dim webRequest = MyBase.GetWebRequest(address) 4 If TypeOf webRequest Is Net.HttpWebRequest Then 5 6 With CType(webRequest, Net.HttpWebRequest) 7 .CookieContainer = _cookieContainer 8 .ContentType = "application/x-www-form-urlencoded;charset=utf-8" 9 .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.9" 10 .KeepAlive = True 11 .UserAgent = "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.61 Safari/537.36" 12 End With 13 14 webRequest.Headers.Add(HttpRequestHeader.AcceptLanguage, "ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7") 15 webRequest.Headers.Add("X-Requested-With:statusText") 16 webRequest.Headers.Add("Upgrade-Insecure-Requests:1") 17 webRequest.Headers.Add("sec-ch-ua-platform:Windows") 18 webRequest.Headers.Add("Sec-Fetch-Dest:document") 19 webRequest.Headers.Add("Sec-Fetch-Mode:cors") 20 webRequest.Headers.Add("Sec-Fetch-Site:same-origin") 21 webRequest.Headers.Add("Sec-Fetch-User:?1") 22 webRequest.Headers.Add("sec-ch-ua:Chromium;v=94,Google Chrome;v=94,;Not A Brand;v=99") 23 End If 24 Return webRequest 25 End Function
試したこと
Chromeコンソールと比較して同内容のヘッダをセットするも、503エラーが返却されました。
補足情報(FW/ツールのバージョンなど)
.NET FrameWork4.7.2
手を尽くしたつもりではいますが、ネットワーク関連は不得手であるため簡単な見落としかもしれません。
解決法をご存じの方がいらっしゃいましたらご教示ください。
お待ちしております。
あなたの回答
tips
プレビュー