新米エンジニアの失敗再発防止メモ

自分そしてこの世界の皆が、同じ失敗をしないためのメモ

Twitterやってます!@rakuton_t
欲しいものリストのブタメンを送ってくれた方、ありがとうございます!

WebClientでWebページの取得方法

ずばり、こう

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

私の記事が役に立ったら、どうぞ何か買ってください!→ Amazon欲しいものリスト