注册 登录
编程论坛 VB.NET论坛

请教高手,这个类能改成VB.NET语言吗

guchew 发布于 2016-12-04 19:36, 3740 次点击
public static class Util   
{        
   /// <summary>        
   /// Sets the cert policy.     
   /// </summary>  
   public static void SetCertificatePolicy()  
   {      
       ServicePointManager.ServerCertificateValidationCallback  += RemoteCertificateValidate;        
   }

  /// <summary>         
  /// Remotes the certificate validate.         
  /// </summary>        
  private static bool RemoteCertificateValidate( object sender, X509Certificate cert,  X509Chain chain, SslPolicyErrors error)  
  {     
      // trust any certificate!!!         
      System.Console.WriteLine("Warning, trust any certificate");      
      return true;
  }   
}
8 回复
#2
guchew2016-12-05 10:10
其实也没必要非要用这个类修改,自己写两个函数解决了。真正让我头痛的问题是这样的:
程序代码:
TempXmlObject = CreateObject("Msxml2.ServerXMLHTTP.6.0")
With TempXmlObject
            .Open("GET", url, False)
            .SetRequestHeader("Connection", "keep-alive")
            .SetRequestHeader("Accept-Encoding", "gzip, deflate")
            .setRequestHeader("Accept-Language", "zh-CN,en-us;q=0.8,en;q=0.6")
            .setRequestHeader("User-Agent",useragent)
            .Send()

运行程序,会在.Send()处报错:“接收到的消息异常,或格式不正确。”而开着抓包软件运行程序则能正常收到数据,访问的是一个HTTPS网站。请高手指点如何解决。


[此贴子已经被作者于2016-12-5 10:13编辑过]

#3
不说也罢2016-12-05 11:45
对于一楼,可以转换成:
程序代码:

Public NotInheritable Class Util
    Private Sub New()
    End Sub
    ''' <summary>        
   
''' Sets the cert policy.     
   
''' </summary>  
    Public Shared Sub SetCertificatePolicy()
        AddHandler ServicePointManager.ServerCertificateValidationCallback, AddressOf RemoteCertificateValidate
    End Sub

    ''' <summary>         
   
''' Remotes the certificate validate.         
   
''' </summary>        
    Private Shared Function RemoteCertificateValidate(sender As Object, cert As X509Certificate, chain As X509Chain, [error] As SslPolicyErrors) As Boolean
        ' trust any certificate!!!         
        System.Console.WriteLine("Warning, trust any certificate")
        Return True
    End Function
End Class

#4
不说也罢2016-12-05 16:19
至于二楼的问题,我暂时无法重现,因为不知道你的变量url和useragent的值。
我用你的代码并为上面两个变量赋值,代码完整运行。分析认为,你发送的数据格式不符合规范要求。下面是代码及运行截图:

程序代码:

   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim TempXmlObject As Object = CreateObject("Msxml2.ServerXMLHTTP.6.0")
        Dim useragent As String = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; QQDownload 663; Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1) ; .NET CLR 2.0.50727)"
        With TempXmlObject
            .Open("GET", "http://mail.", False)
            .SetRequestHeader("Connection", "keep-alive")
            '.SetRequestHeader("Accept-Encoding", "gzip, deflate")
            .setRequestHeader("Accept-Language", "zh-CN,en-us;q=0.8,en;q=0.6")
            .setRequestHeader("User-Agent", useragent)
            .Send()
            Dim result As String = .responseText
            MsgBox(result)
        End With
    End Sub


只有本站会员才能查看附件,请 登录
#5
guchew2016-12-05 20:24
回复 3楼 不说也罢
版主C语言功底深厚啊,一下看出这是个回调函数。
#6
guchew2016-12-05 20:43
回复 4楼 不说也罢
这个问题我可能没交代清楚,一般的网站用这个程序肯定没问题,但我要访问的是一个HTTPS网站,可能有SSL之类的协议,协议方面我不懂。我这个程序还漏了几个文件头,应该要忽略证书异常。我感到奇怪的是请求网站不能成功也就罢了,但我开着HTTP analyzer时又能正常收发数据。今天翻墙到HTTP Analyzer论坛发贴请教,好像是个版主问我用FIDDLER能否截获到数据,我试了不能。不知道能不能得到他们的进一步解答。网址不便公开,如果版主有兴趣我发到你信箱。
#7
guchew2016-12-05 20:58
发不了短信啊,说是最多500字,我这那有500字啊。
#8
不说也罢2016-12-06 09:24
以下是引用guchew在2016-12-5 20:43:16的发言:

这个问题我可能没交代清楚,一般的网站用这个程序肯定没问题,但我要访问的是一个HTTPS网站,可能有SSL之类的协议,。。。。。


原理是一样的,猜测你要访问的网站,不仅是HTTPS网站,而且需要数字证书(UKEY)之类进行登录验证是吧。访问“https://mail.”就没有障碍。

我注意到你二楼的“接收到的消息异常,或格式不正确。”你尝试把.SetRequestHeader("Accept-Encoding", "gzip, deflate")这行代码注释掉再测试下。

有时间再讨论吧。
#9
guchew2016-12-06 16:36
今天老外回复我叫我用webrequest试试。我试了用这个类的确可以发出数据,但在Dim res As HttpWebResponse = CType(req.GetResponse(), HttpWebResponse)处出现提示:基础连接已经关闭: 发送时发生错误。百度了一下碰到这个问题的人很多,但他们的解决方案对我无效。

   


[此贴子已经被作者于2016-12-6 19:41编辑过]

1