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

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

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

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

Q&A

解決済

1回答

3798閲覧

vb.net : httpclientを使用してBasic認証する方法をご教示頂けないでしょうか。

ctk

総合スコア31

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

VB.NET

Microsoft Visual Basic .NETのことで、Microsoft Visual Basic(VB6)の後継。 .NET環境向けのプログラムを開発することができます。 現在のVB.NETでは、.NET Frameworkを利用して開発を行うことが可能です。

0グッド

0クリップ

投稿2021/12/09 12:30

編集2021/12/09 13:07

いつも大変お世話になっております。

早速ですが、
httpclientを使用してBasic認証する方法をご教示頂けないでしょうか。

現在、Basic認証が掛かっているサイトにあるtextデータを取得するプログラムを作成しております。
リンク内容
のサイトなどを参考に実装してみたのですが、
実行すると、405 コードが返ってきて認証に失敗しているようです。
何か考えられる原因をご教示頂けると幸いです、何卒よろしくお願いいたします。

開発環境は、
OS:windows10 pro
VisualStudio:Visual Studio 2017
.net framwork :4.6.2
になります。

開発している最終形は、
VB.netの実行ファイルを実行すると、
Basic認証が掛かっているサイトからtextデータをローカルにダウンロードする事
になります。

StatusCode: 405, ReasonPhrase: '', Version: 1.1, Content: System.Net.Http.StreamContent, Headers:
{
Date: Thu, 09 Dec 2021 12:25:43 GMT
Set-Cookie: JSESSIONID=6BA7E815E156B8C688AED2E56D7B2B92; Path=/; HttpOnly
Content-Length: 1181
Content-Language: ja
Content-Type: text/html; charset=utf-8
}

[コード] Private Async Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click 'Basic認証するユーザ名とパスワード Dim userName = "test" Dim userPassword = "test" 'リクエストの生成 Dim request = New HttpRequestMessage request.Method = HttpMethod.Post request.RequestUri = New Uri("http://sample.jp/") 'Basic認証ヘッダを付与する request.Headers.Authorization = New System.Net.Http.Headers.AuthenticationHeaderValue( "Basic", Convert.ToBase64String(Encoding.ASCII.GetBytes(String.Format("{0}:{1}", userName, userPassword)))) 'リクエストの送信 Dim httpClient = New HttpClient() Dim response = Await httpClient.SendAsync(request) MessageBox.Show(response.ToString) End Sub

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

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

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

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

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

退会済みユーザー

退会済みユーザー

2021/12/09 12:39

まず、何はともあれ、コードは ``` と ``` で囲ってください(``` はバッククォート 3 つ)。インデントされて見やすくなるので。 参考にしたサイトは URL の文字列を書くだけではなく、ワンクリックでそこに飛べるようリンクを張って下さい。 次に何を作っているか(WinForms? WPF? ASP.NET Web アプリ? その他?)と開発環境(OS, Visual Studio のバージョン、.NET Framework か Core のどっちかろそのバージョンなど)を質問欄を編集して追記してください。
ctk

2021/12/09 12:44

SurferOnWww様 早速、ご連絡頂き、誠にありがとうございます。先ほど、修正させて頂きました。
退会済みユーザー

退会済みユーザー

2021/12/09 12:50

何を作っているか(WinForms? WPF? ASP.NET Web アプリ? その他?)と開発環境(OS, Visual Studio のバージョン、.NET Framework か Core のどっちかろそのバージョンなど)を質問欄を編集して追記してください。 「405 - メソッドは許可されていません」で認証に通らなかったときのエラーメッセージと違うようですが? ブラウザでアクセスしてそれから同じ id と password を入力してログインできますか?
ctk

2021/12/09 13:04

SurferOnWww様 お付合い頂き、誠にありがとうございます。開発環境を追記致しました。 また、IDとPASSWORDの件ですが、Chrome等のWebブラウザではログイン出来ました。
退会済みユーザー

退会済みユーザー

2021/12/09 13:47

Fiddler を使って、ブラウザでうまくいく時と HttpClient でダメな時の要求・応答を比べると、そこに解決のためのヒントが見つかるかもしれません。
退会済みユーザー

退会済みユーザー

2021/12/11 01:17

質問者さん、その後無言ですが、回答したのでそれに対するフィードバックを質問のコメント欄に書いてください。役に立った/立たなかったぐらいはすぐに返せるのでは? 役に立たなかったなら、どこがダメなのかを書いてもらえるとより期待に近い回答が出てくるかも。とにかく無言で放置は NG です。
ctk

2021/12/11 01:44

SurferOnWww様 貴重なお時間を割いて、ご回答頂いたのに連絡が滞ており、誠に申し訳ございません。 request.Method = HttpMethod.Post を get にすることで、Status 200が戻ってくるようになりました。Fiddlerの調査方法含めて、大変勉強になりました。今後とも何卒よろしくお願いいたします。
guest

回答1

0

ベストアンサー

質問へのコメントで書いたことですが、まとめて回答として回答欄に書いておきます。

405 コードが返ってきて認証に失敗しているようです。

405 というのは「メソッドは許可されていません」ということで認証に通らなかったときのエラーメッセージと違うようですが?

上記レスをコメント欄に書いた時何の反応もなかったのは多分言われてることが分からなかったのだろうと想像してますが、であれば http 405 などをキーワードにしてググってみましょう。以下のような記事がヒットするはずです。

405 Method Not Allowed
https://developer.mozilla.org/ja/docs/Web/HTTP/Status/405

そこに "リクエストメソッドをサーバー側で認識しているが、対象のリソースでは対応していない" と書いてあります。

ということは、質問者さんのコードのリクエストメソッド HttpMethod.Post に対応してないということが疑わしいという考えに至るはずです。405 エラーの原因は他にもいろいろあるそうですので、あくまで「疑わしい」というレベルですが、まず HttpMethod.Post を HttpMethod.Get に代えて試してみたらどうですか?

IDとPASSWORDの件ですが、Chrome等のWebブラウザではログイン出来ました。

ということは GET 要求だったから通ったのではないですか?

Fiddler を使って、ブラウザでうまくいく時と HttpClient でダメな時の要求・応答を詳細に比べてみてください。そこに解決のためのヒントが見つかるかもしれません。

投稿2021/12/10 01:23

編集2021/12/10 01:25
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問