ずばり、こう
まず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ではアクセスできるので、プログラムの問題であることは間違いないが原因が分からない。
わかったらまた記事にします。