DOBON.NET DOBON.NETプログラミング掲示板過去ログ

Socketクラスについて

環境/言語:[vb.net]
分類:[.NET]

Socketクラスを使ってHTTPサーバーにGET要求し、応答を受信する方法のサンプルを拝見しましたが、この方法でHTTPSを使ったGET要求に対し、応答を受信する方法を教えて下さい。
■No8866に返信(araiさんの記事)
> Socketクラスを使ってHTTPサーバーにGET要求し、応答を受信する方法のサンプルを拝見しましたが、この方法でHTTPSを使ったGET要求に対し、応答を受信する方法を教えて下さい。
>

こんなんでいかがでしょ?
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=15416&forum=7
シャノンさん こんにちは。
返信有難うございます。
早速試してみましたが、コネクト時に待ち状態になってしまいエラーをなってしまいます。多分「このセキュリティは信頼する会社から発行・・・」の警告が出ていると思われます。
VB.net初心者の為、クラスの登録などが間違っているのかもしれませんが、何か考えられるこがございましたらご教授お願い致します。
 
ソースリスト

Module Module1
    Sub Main()
        System.Net.ServicePointManager.CertificatePolicy = New MyPolicy
        'GETリクエストを送信するサーバー名とパス
        Dim server As String = "testsv2"
        Dim path As String = "/servlet/CsvDownloadServlet?id=login"
        Dim reqMsg As String = _
            "GET " + path + " HTTP/1.0" + ControlChars.CrLf + ControlChars.CrLf
        '文字列をbyte配列に変換
        'Dim enc As System.Text.Encoding = System.Text.Encoding.ASCII
        Dim enc As System.Text.Encoding = System.Text.Encoding.Default
        Dim reqBytes As Byte() = enc.GetBytes(reqMsg)

        'ホスト名からIPアドレスを取得
        Dim hostadd As System.Net.IPAddress = _
        System.Net.Dns.Resolve(server).AddressList(0)
        Dim ephost As New System.Net.IPEndPoint(hostadd, 80)

        'Socketの作成
        Dim sock As New System.Net.Sockets.Socket( _
            System.Net.Sockets.AddressFamily.InterNetwork, _
            System.Net.Sockets.SocketType.Stream, _
            System.Net.Sockets.ProtocolType.Tcp)

        '接続
        sock.Connect(ephost)
        '接続の確認
        If sock.Connected = False Then
            Console.WriteLine("接続できませんでした。")
            Return
        End If

        'リクエストメッセージを送信
        sock.Send(reqBytes, reqBytes.Length, _
            System.Net.Sockets.SocketFlags.None)

        '受信する
        Dim resMsg As String = ""
        Dim resBytes(255) As Byte
        While True
            Dim resSize As Integer = _
                sock.Receive(resBytes, resBytes.Length, _
                    System.Net.Sockets.SocketFlags.None)
            If resSize = 0 Then
                Exit While
            End If
            resMsg += enc.GetString(resBytes, 0, resSize)
        End While

        '閉じる
        sock.Shutdown(System.Net.Sockets.SocketShutdown.Both)
        sock.Close()

        '受信したメッセージを表示する
        Console.WriteLine(resMsg)
    End Sub
End Module

Public Class MyPolicy
    Implements System.Net.ICertificatePolicy
    Public Function CheckValidationResult1(ByVal srvPoint As System.Net.ServicePoint, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal request As System.Net.WebRequest, ByVal certificateProblem As Integer) As Boolean Implements System.Net.ICertificatePolicy.CheckValidationResult
        If certificateProblem = 0 Or certificateProblem = -2146762487 Or certificateProblem = -2146762495 Or certificateProblem = -2146762481 Then
            Return True
        Else
            Return False
        End If
    End Function
End Class
■No8892に返信(araiさんの記事)
> シャノンさん こんにちは。
> 返信有難うございます。
> 早速試してみましたが、コネクト時に待ち状態になってしまいエラーをなってしまいます。多分「このセキュリティは信頼する会社から発行・・・」の警告が出ていると思われます。
> VB.net初心者の為、クラスの登録などが間違っているのかもしれませんが、何か考えられるこがございましたらご教授お願い致します。
>  
> ソースリスト
>
> Module Module1
> Sub Main()
> System.Net.ServicePointManager.CertificatePolicy = New MyPolicy
> 'GETリクエストを送信するサーバー名とパス
> Dim server As String = "testsv2"
> Dim path As String = "/servlet/CsvDownloadServlet?id=login"
> Dim reqMsg As String = _
> "GET " + path + " HTTP/1.0" + ControlChars.CrLf + ControlChars.CrLf
> '文字列をbyte配列に変換
> 'Dim enc As System.Text.Encoding = System.Text.Encoding.ASCII
> Dim enc As System.Text.Encoding = System.Text.Encoding.Default
> Dim reqBytes As Byte() = enc.GetBytes(reqMsg)
>
> 'ホスト名からIPアドレスを取得
> Dim hostadd As System.Net.IPAddress = _
> System.Net.Dns.Resolve(server).AddressList(0)
> Dim ephost As New System.Net.IPEndPoint(hostadd, 80)
>
> 'Socketの作成
> Dim sock As New System.Net.Sockets.Socket( _
> System.Net.Sockets.AddressFamily.InterNetwork, _
> System.Net.Sockets.SocketType.Stream, _
> System.Net.Sockets.ProtocolType.Tcp)
>
> '接続
> sock.Connect(ephost)
> '接続の確認
> If sock.Connected = False Then
> Console.WriteLine("接続できませんでした。")
> Return
> End If
>
> 'リクエストメッセージを送信
> sock.Send(reqBytes, reqBytes.Length, _
> System.Net.Sockets.SocketFlags.None)
>
> '受信する
> Dim resMsg As String = ""
> Dim resBytes(255) As Byte
> While True
> Dim resSize As Integer = _
> sock.Receive(resBytes, resBytes.Length, _
> System.Net.Sockets.SocketFlags.None)
> If resSize = 0 Then
> Exit While
> End If
> resMsg += enc.GetString(resBytes, 0, resSize)
> End While
>
> '閉じる
> sock.Shutdown(System.Net.Sockets.SocketShutdown.Both)
> sock.Close()
>
> '受信したメッセージを表示する
> Console.WriteLine(resMsg)
> End Sub
> End Module
>
> Public Class MyPolicy
> Implements System.Net.ICertificatePolicy
> Public Function CheckValidationResult1(ByVal srvPoint As System.Net.ServicePoint, ByVal certificate As System.Security.Cryptography.X509Certificates.X509Certificate, ByVal request As System.Net.WebRequest, ByVal certificateProblem As Integer) As Boolean Implements System.Net.ICertificatePolicy.CheckValidationResult
> If certificateProblem = 0 Or certificateProblem = -2146762487 Or certificateProblem = -2146762495 Or certificateProblem = -2146762481 Then
> Return True
> Else
> Return False
> End If
> End Function
> End Class
>
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板