HTTPSのサイトからのダウンロード方法

このQ&Aのポイント
  • HTTPSのサイトにアクセスしてブラウザではなくテキストで表示させる方法について教えてください。
  • HTTPのサイトでは正常に表示できるコードですが、HTTPSのサイトでは動作しません。
  • 現在アクセスしようとしているページはユーザー名とパスワードを必要としません。ブラウザで表示すれば問題ありません。
回答を見る
  • ベストアンサー

HTTPSのサイトからのダウンロード方法

HTTPSのサイトにアクセスしてブラウザではなくテキストで表示させるにはどうすればいいのでしょうか? 通常のHTTPのサイトからは下記のコードで動作するようになりました。 これでHTTPSのサイトにアクセスしても返事が返ってきません。 今アクセスしようとしているページはまだユーザー名、パスワードが不用なページです。 ブラウザで表示させれば問題なく表示されます。 ご存知の方は教えて下さい。 [サンプルコード] Private Sub btnConnect_Click(ByVal sender As System.Object,_    ByVal e As System.EventArgs) Handles btnConnect.Click 'HttpWebRequestの作成 Dim strURL As String txtResponce.Text = "" txtResponce.Refresh() If Me.rbULR1.Checked Then strURL = txtURL1.Text Else strURL = txtURL2.Text End If Dim webreq As System.Net.HttpWebRequest = _ CType(System.Net.WebRequest.Create(strURL), _ System.Net.HttpWebRequest) 'サーバーからの応答を受信するためのHttpWebResponseを取得 Dim webres As System.Net.HttpWebResponse = _ CType(webreq.GetResponse(), System.Net.HttpWebResponse) '文字コードを指定する Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding(932) '応答データを受信するためのStreamを取得 Dim st As System.IO.Stream = webres.GetResponseStream() Dim sr As New System.IO.StreamReader(st, enc) '受信して表示 Me.txtResponce.Text = sr.ReadToEnd() '閉じる sr.Close() End Sub

質問者が選んだベストアンサー

  • ベストアンサー
noname#246547
noname#246547
回答No.2

VBの開発環境がないので再現できないので、 下記の件をお答えします >”HttpWebRequest を使用したクライアント認証を行うには、現在のユーザーの個人用証明書ストアにクライアント証明書がインストールされている必要があります。” IEにクライアント証明書をインストールした覚えがなければ利用していないはずです 確認するにはIEのメニューから「インターネットオプション」-「コンテンツ」-「証明書」-「個人」 に証明書があるか無いか確認してください 無い場合、IEはhttpsにおいてクライアント証明書を送信せずに通信を完了しています あと、サーバ側でクライアント証明書を必要としているかは、 HTTPサーバがapacheであれば、 SSL設定ファイルの SSLVerifyClient require となっているはずですが、 デフォルトではnoneのはずです。

t_rodan
質問者

補足

回答ありがとうございます。 最初にHTTPSのサイトからダウンロードできないと書きましたが、その後色々試してみると同じHTTPSのサイトでも最初のコードでダウンロードできるサイトもあることがわかりました。 今回はこのアクセスできるサイトで試してみたいとおもいます。 色々教えていただいてありがとうございました。 最後にクライアント証明書について教えていただきたいのですが「証明書」-「個人」には発行先、発行者とも私の名前が書かれたもの1件のみでした。 「信頼された証明機関」のタブにはたくさんの証明書が登録されていました。 これはIEが自動的に取得した証明書が収められているのでしょうか? また、IE以外のアプリでもこの証明書を利用できるのでしょうか? もし、ご存知なら教えて下さい。

その他の回答 (2)

noname#246547
noname#246547
回答No.3

>「証明書」-「個人」 自動で登録はされないので、システム管理者等(会社で利用しているPCならば)が入れたと思われます 証明書があるのであれば、 >”HttpWebRequest を使用したクライアント認証を行うには、現在のユーザーの個人用証明書ストアにクライアント証明書がインストールされている必要があります。” の件で、 この証明書を読み込むようコーディングすれば、参照できなかったURLにアクセスできるようになるかと。

t_rodan
質問者

お礼

回答ありがとうございました。 たいへん参考になりました。 また、機会があったらよろしくお願いします。

noname#246547
noname#246547
回答No.1

マイクロソフトの下記のページでHTTPS接続できない不具合と対処があるようですが、 コレに該当しておりませんか?

参考URL:
http://support.microsoft.com/kb/823177/ja
t_rodan
質問者

補足

回答ありがとうございます。 参考のページを確認させてもらいましたが、このページでは.NET Framework 1.1対象となっていましたが、現在私が使っているのはVB2008なので3.5です。 ですから少なくともこのページで報告されている現象はクリアされていると思うのですがどうでしょうか? この「HttpWebRequest」の説明をmsdnでみると次のような説明がありました。 ” HttpWebRequest コンストラクタは使用しないでください。新しい HttpWebRequest オブジェクトを初期化するには、WebRequest..::.Create メソッドを使用します。URI (Uniform Resource Identifier) のスキームが http:// または https:// の場合、 Create は HttpWebRequest オブジェクトを返します。” ということはhttpsのサイトでも動作すると思うのですが... また、こんな文章もありました。 ”HttpWebRequest を使用したクライアント認証を行うには、現在のユーザーの個人用証明書ストアにクライアント証明書がインストールされている必要があります。” これって対象のサイトからの クライアント証明書なるものが必要ということでしょうか? ただ、IEで対象のサイトにアクセスできるということは少なくともIEではその証明書を利用しているということだと思います。 その証明書ファイルの置き場所が問題なのでしょうか? もし、わかるようでしたらお願いします。

関連するQ&A

  • C#でストリームの保存の仕方

    以下のコードのストリームstの保存を行いたいのですが、Streamのインスタンスをnewで作れないので どのようにすればよいでしょうか。お願いします。 HttpWebRequest webreq = (HttpWebRequest)WebRequest.Create("http://www.***.co.jp"); HttpWebResponse webres = (HttpWebResponse)webreq.GetResponse(); Stream st = webres.GetResponseStream();

  • VB2003でファイルのダウンロードについて教えて

    Dim req As HttpWebRequest = CType(WebRequest.Create(url), HttpWebRequest) Dim res As WebResponse = req.GetResponse() Dim resStream As Stream = res.GetResponseStream() Dim fs As New System.IO.FileStream(SaveName, FileMode.Create, FileAccess.Write) Dim b As Integer While True b = resStream.ReadByte() If b = -1 Then Exit While fs.WriteByte(Convert.ToByte(b)) End While VB.NET2003ですが上記の方法でファイルをダウンロードしているのですが、 ブラウザで表示して転送される場合は30秒ほどなのですが、 この方法でダウンロードすると130秒くらいかかってしまいます。 ディスクに書き込む動作が足を引っ張っているのかと思って 下から2行目を消して計測してみたのですがそれでも10秒ほどしか短縮しませんでした。 タスクマネージャーで確認してもCPUリソースが50をずっと超えているのですが ブラウザなどでダウンロードする時のように高速でCPUに負担をかけずにダウンロードするには どんな方法でやれば良いでしょうか? よろしくお願い致します。

  • フォト蔵へアップロードできません(C#)

    フォト蔵へアップロードするとエラー400が出てしまいます。 何が原因なのでしょうか?原因を教えてください。 以下コード //フォト蔵へのアップロード(注意動きません)// //送信するファイルのパス filePath="C:\\Users\\Public\\Pictures\\Sample Pictures\\test.jpg"; //送信先のURL string url1 = "http://api.photozou.jp/rest/photo_add"; //文字コード System.Text.Encoding enc = System.Text.Encoding.GetEncoding("UTF-8"); //WebRequestの作成 System.Net.HttpWebRequest req = (System.Net.HttpWebRequest) System.Net.WebRequest.Create(url1); //メソッドにPOSTを指定 req.Method = "POST"; //ベーシック認証宣言、アカウントとパスワード req.PreAuthenticate = true; NetworkCredential network = new NetworkCredential("mailaddress@hoge.com", "password"); req.Credentials = network; //ヘッダを設定 req.Headers.Add("album_id", "1234567"); //ContentTypeを設定 req.ContentType = "image/jpeg"; //POST送信するデータを作成 System.IO.FileStream fs = new System.IO.FileStream( filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read); //POST送信するデータの長さを指定 req.ContentLength = fs.Length; //データをPOST送信するためのStreamを取得 System.IO.Stream reqStream = req.GetRequestStream(); //ファイルの内容を送信 byte[] readData = new byte[0x1000]; int readSize = 0; while (true) { readSize = fs.Read(readData, 0, readData.Length); if (readSize == 0) break; reqStream.Write(readData, 0, readSize); } fs.Close(); reqStream.Close(); //サーバーからの応答を受信するためのWebResponseを取得 System.Net.HttpWebResponse res = (System.Net.HttpWebResponse) req.GetResponse(); //応答データを受信するためのStreamを取得 System.IO.Stream resStream = res.GetResponseStream(); //受信 System.IO.StreamReader sr = new System.IO.StreamReader(resStream, enc); //閉じる sr.Close();

  • ウェブ内容をshift-jis変換するには?

    続けての質問になってしまいます。 VB.NET で、ウェブクライアントで下記のようにウェブページの内容を取得しましたが、 コードがUTF?のため日本語で表示されません。 内容を変数に格納し、shift-jis変換するにはどのように記述すればよいのでしょうか? Dim webClient As New System.Net.WebClient Dim sr As System.IO.Stream = webClient.OpenRead("http://www.nikkei.co.jp/") Dim srRead As New System.IO.StreamReader(sr) TextBox1.Text = srRead.ReadToEnd  よろしくお願いします。

  • vb2005でUDP受信時にフォームが表示されない

    はじめまして VB2005でUDPのメッセージを受信してForm上のLabelに受信内容を表示させるサンプルプログラムを作成したのですが、「デバック開始」をクリックしてもFormのウィンドウ自体が表示されません。 イミディエイトにdebug.printで受信データは表示されていますのでプログラム自体は正常に動作しているようです。 どなたかアドバイスをいただけませんでしょうか。 Public Class Form1 Dim localport As Integer = 1111 Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load '文字コードを指定する Dim enc As System.Text.Encoding = System.Text.Encoding.UTF8 ' バインド Dim udp As New System.Net.Sockets.UdpClient(localport) ' 受信 Dim remoteEP As System.Net.IPEndPoint = Nothing Debug.Print("受信開始") Do My.Application.DoEvents() Dim rcvBytes As Byte() = udp.Receive(remoteEP) Dim rcvMsg As String = enc.GetString(rcvBytes) My.Application.DoEvents() Debug.Print("受信メッセージ:" & rcvMsg) Label1.Text = rcvMsg Loop End Sub End Class

  • バイト配列のバイト数の設定方法を教えてください

    下のようなコードでWebページのソースを取得して、 そのページのコードを解析して、文字化けのない正常な状態で 変数にソースコードを代入するプログラムなのですが、 バイト配列に代入するためのバイト配列の配列数ですが、 5000などとするとページの途中まで正常に取得できるのですが、 多めにと思って50000とかとすると文字化けしてしまいます。 多すぎるとだめなようなのですが、これをぴったりの数値で設定するには ページのバイト数はどのように取得したら良いでしょうか? 下のコードのGetCode(bs)というのは http://dobon.net/vb/dotnet/string/detectcode.html のページにあるコード解析関数の呼び出しの部分です。 Dim txt As String = "http://www.yahoo.co.jp" Dim wc As New System.Net.WebClient Dim fs As System.IO.Stream = wc.OpenRead(txt) Dim bs(5000) As Byte 'byte配列に読み込む fs.Read(bs, 0, bs.Length) fs.Close() '文字コードを取得する Dim enc As System.Text.Encoding = GetCode(bs) 'デコードしてtxtに代入する txt = enc.GetString(bs) よろしくお願いいたします。

  • 排他ロックが掛かっているファイルを読み込む

    排他ロックが掛かっている(別のプロセスが使用している) テキストファイルを読み込みたいのですが、 System.IO.FileStreamを実行した後に、IOExceptionエラーが発生し、 読み込みができません。 System.IO.FileStreamにはこだわってませんので、 排他ロックが掛かっているテキストファイルを読み込む方法を ご存知の方は、ご教授頂けませんでしょうか。 宜しくお願いします。 <ソースコード> 'ファイルパス wFullPath = "\\XXX.XXX.XXX.XXX\TEXT\TEST.TXT" (XXX.XXX.XXX.XXX:IPアドレス) 'ファイルを開く Dim fs As New System.IO.FileStream(wFullPath, _ System.IO.FileMode.Open, _ System.IO.FileAccess.ReadWrite, _ System.IO.FileShare.ReadWrite) 'FileStreamを基にしたStringReaderのインスタンスを作成 Dim enc As System.Text.Encoding = _ System.Text.Encoding.GetEncoding("shift_jis") Dim sr As New System.IO.StreamReader(fs, enc) 'ファイルの内容をすべて読み込む Dim s As String = sr.ReadToEnd() <開発環境> 言語:VB.NET Microsoft Visual Studio 2008 Microsoft .NET Framework Version 3.5 SP1

  • 1行ごとに取得して、その改行文字が何か知る方法

    CR,LF,CRLFが混在しているテキストで難儀しております。 VB.NETでReadLine()を使えば、どんな改行コードでも削除した文字列を取得できますが、同じ内容を書き込む場合にどのような改行コードわからないと同じファイルができません。 安直にNewLineやWriteLine()を使うと、どんな改行コードでWindowsの場合はCRLFになります。 ReadLine()で取得した文字列+改行コードがわかる方法がありますか? 以下、例です。 dim s as String Dim sr As New System.IO.StreamReader("yomu", "ISO-2022-JP") Dim sw As New System.IO.StreamWriter("kaku", false, "ISO-2022-JP") While sr.Peek() > -1 s = sr.ReadLine() '改行文字を取り除いた文字列 sw.Write(s) '書き込む end While sr.close() sw.close()

  • vb2008で文字列から文字列コードを取得する方法

    サイトHTMLをWebBrowserを使用せずに取得するために、 Dim stream As System.IO.Stream = client.OpenRead(tbItemURL.Text) Dim reader As New System.IO.StreamReader(stream) Dim strHtml = reader.ReadToEnd() reader.Close() stream.Close() のような形で文字列を取得しています。 しかし、この場合Sift-jis等の場合、後の作業(一部データ取得)で文字化けに悩まされます。 http://dobon.net/vb/dotnet/string/detectcode.html 上記サイトで「バイト配列」に格納して判別する方法があります。 そこで、文字列をバイト配列に格納しようとしますが…。 文字列→バイト配列には文字コードが必要となります。 Dim data() As Byte = Encoding.UTF8.GetBytes(text) なんだか鶏と卵のような感じになってしまいます。 文字列から文字コードを判別する方法はないでしょうか? よろしくお願いします。

  • VB.NETでのEecelデータの読み込みについて

    VB.netを使用しています。 過去ログを参考にして、Excel値の読み込みのプログラム作成をしています。 下記のコードでerrorはでないのですが、正常な値を読み込んでくれません。どなたかアドバイスお願いします。 ※sampleファイルのsheet1のセルA1の値をLabel1に読み込みたい このコードを実行するとLabel1に "System.__ComObject" と表示されてしまう。 セルA1には"100"という数値が入っています。 Dim excelFilePath As String = "C:\sample.xls" Dim Excel As Excel.Application Dim ExcelBook As Excel.Workbook Dim ExcelSheet As Excel.Worksheet Excel = CType(CreateObject("Excel.application"), Excel.Application) ExcelBook = CType(Excel.Workbooks.Open(excelFilePath), Excel.Workbook) ExcelSheet = CType(ExcelBook.Worksheets(1), Excel.Worksheet) Label1.Text = ExcelSheet.Cells(1, 1).ToString

専門家に質問してみよう