ずばり、こう
まずusingするもの
using System; using System.Collections; using System.IO; using System.Net; using System.Net.Security; using System.Text;
GETメソッドを使う場合
var html = ""; using (var wc = new WebClient()) { // SSL/TLSに対応 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); // GETパラメータの設定 var ps = new System.Collections.Specialized.NameValueCollection(); ps.Add("キー", "バリュー"); wc.QueryString = ps; // ヘッダーの設定(Chromeのふりをする設定) wc.Headers.Add(HttpRequestHeader.UserAgent , "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); // 通信・取得 var resData = wc.OpenRead(url); using (var sr = new StreamReader(resData, Encoding.GetEncoding("UTF-8"))) { html = sr.ReadToEnd(); } } return html;
POSTメソッドを使う場合
var html = ""; using (var wc = new WebClient()) { // SSL/TLSに対応 ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12; // 安全性の確保されていない場合でも取得する設定(オレオレ証明書) ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(delegate { return true; }); // GETパラメータの設定 var ps = new System.Collections.Specialized.NameValueCollection(); ps.Add("キー", "バリュー"); // ヘッダーの設定(Chromeのふりをする設定) wc.Headers.Add(HttpRequestHeader.UserAgent , "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/63.0.3239.132 Safari/537.36"); // 通信・取得 var resData = wc.UploadValues(url, ps); html = Encoding.UTF8.GetString(resData); }
注意点
取得元のサーバーがPOST値を受け取る設定をしていなければ、
POSTメソッドを使うと下記エラーになる
リモート サーバーがエラーを返しました (405) メソッドは使用できません
403のこともある
リモート サーバーがエラーを返しました (403) 使用不可能
ただ、ナエキ(https://www.nike.com/jp/ja_jp/)はなぜかどうやっても403になるのですよね...
ChromeやIEではアクセスできるので、プログラムの問題であることは間違いないが原因が分からない。
わかったらまた記事にします。