質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

Q&A

解決済

1回答

4189閲覧

【C#】HTTPClientでログインするにはどうすればよいでしょうか

OXamarin

総合スコア59

HttpWebRequest

HttpWebRequestとは.NETにおけるクラスであり、WebRequestクラスをHTTPに導入するものです。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

POST

POSTはHTTPプロトコルのリクエストメソッドです。ファイルをアップロードしたときや入力フォームが送信されたときなど、クライアントがデータをサーバに送る際に利用されます。

0グッド

0クリップ

投稿2021/01/07 11:56

##環境
言語:C#
フレームワーク:.NET Framework 4.5.1
コンソールアプリケーション

##困っている事
以下のサイトにHTTPClient でログインしたいと考えています。
https://www.traderswebfx.jp/login.aspx?from=/

Postリクエストで200 OK の結果は返ってきますが、クッキーが取得できません。
FormUrlEncodedContentにログインID・パスワードをセットし、
リクエストヘッダーをセットすればよいと考えておりますが知識が乏しく、何が必要かがあまり理解出来ておりません。

何が足りていないのでしょうか。
また、リクエストヘッダーはクッキー以外はこちらで全てセットする必要があるのでしょうか。

C#

1class Program 2{ 3 private static HttpClient _httpClient; 4 private const string LOGIN_ADDRESS = "https://www.traderswebfx.jp/login.aspx?from=/join/default.aspx"; 5 6 static async Task Main(string[] args) 7 { 8 InitializeDefaultValues(); 9 await GetRequest(); 10 } 11 12 private static void InitializeDefaultValues() 13 { 14 ServicePointManager.DefaultConnectionLimit = int.MaxValue; 15 _httpClient = new HttpClient 16 { 17 Timeout = Timeout.InfiniteTimeSpan, 18 }; 19 20 _httpClient.DefaultRequestHeaders.Add("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"); 21 _httpClient.DefaultRequestHeaders.Add("accept-encoding", @"gzip, deflate, br"); 22 _httpClient.DefaultRequestHeaders.Add("accept-language", @"ja-JP,ja;q=0.9,en-US;q=0.8,en;q=0.7"); 23 _httpClient.DefaultRequestHeaders.Add("cache-control", @"max-age=0"); 24 _httpClient.DefaultRequestHeaders.Add("user-agent", @"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 Safari/537.36"); 25 _httpClient.DefaultRequestHeaders.Add("origin", "https://www.traderswebfx.jp"); 26 _httpClient.DefaultRequestHeaders.Add("referer", "https://www.traderswebfx.jp/login.aspx?from=/"); 27 } 28 private static async Task GetRequest() 29 { 30 CookieContainer cc; 31 using (var handler = new HttpClientHandler()) 32 { 33 34 //ログイン用のPOSTデータ生成 35 var content = new FormUrlEncodedContent(new Dictionary<string, string> 36 { 37 {"login_id", "id"}, 38 {"login_pw", "password"}, 39 }); 40 content.Headers.ContentType = new MediaTypeWithQualityHeaderValue(@"application/x-www-form-urlencoded"); 41 content.Headers.ContentLength = 39; 42 43 //ログイン 44 var request = await _httpClient.PostAsync(LOGIN_ADDRESS, content); 45 if (request.IsSuccessStatusCode) 46 { 47 //クッキー保存 48 cc = handler.CookieContainer; 49 var cookies = cc.GetCookies(new Uri(LOGIN_ADDRESS)); 50 51 foreach (Cookie c in cookies) 52 { 53 Console.WriteLine("クッキー名:" + c.Name.ToString()); 54 Console.WriteLine("クッキーを使うサイトのドメイン名:" + c.Domain.ToString()); 55 Console.WriteLine("クッキー発行日時:" + c.TimeStamp.ToString() + Environment.NewLine); 56 } 57 var fuga = 0; 58 } 59 else 60 { 61 } 62 } 63 } 64}

イメージ説明
イメージ説明

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2021/01/07 13:24 編集

普通にブラウザを使ってアクセスすることを前提に考えられたサイトのように見えますが、そうだとするとそのサイトの管理者に許可を得てますか?
guest

回答1

0

自己解決

自己解決いたしました。

投稿2021/01/08 07:08

OXamarin

総合スコア59

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問