【问题标题】:Get updated BTC value from internet从互联网获取更新的 BTC 值
【发布时间】:2020-09-26 07:23:13
【问题描述】:

我正在尝试在 VB.Net 中获取来自互联网的更新后的 BTC 值。

我在普通的私人潜艇中使用这种方法。

Dim btcvalue As String = "https://blockchain.info/tobtc?currency=USD&value=1"
    Try
                Dim reply As String = client.DownloadString(btcvalue)
                TextBox1.Text = reply
          Catch
    End Try

结果是一无所获。我试图用 Internet Explorer 浏览 blockchain.info,但实际上它没有连接。似乎该站点正在阻止该浏览器,该浏览器默认由 vb.net 使用。 我可以从另一个站点获得相同的值,但区块链更容易从那个 url 中提取,因为我直接提取了字符串而没有添加更多代码。我用来从原始 pastebin 页面中提取字符串的相同代码可以代替。 Internet Explorer 可以正常连接到 pastebin 站点。

例如,如何从 google 获取精确的字符串(btc 值)?

【问题讨论】:

标签: vb.net


【解决方案1】:

在调试时,您很可能希望添加一些适当的异常处理。 在您绝对确定要忽略错误(在任何情况下都可以记录错误)时在生产代码中使用空的 Catch 块,并且始终按显式类型处理最可能出现的异常。

如果您在代码中添加一些异常处理:

Dim btcvalue As String = "https://blockchain.info/tobtc?currency=USD&value=1"
Try
    Dim reply As String = client.DownloadString(btcvalue)
    TextBox1.Text = reply

Catch webEx As WebException
    MessageBox.Show(webEx.Message)
    Exit Sub    
End Try

您应该会看到错误消息:

“请求中止:无法创建 SSL/TLS 安全通道。”

当您尝试访问 Https 网址时,您很可能希望使用 ServicePointManager.SecurityProtocol 属性指定安全策略:

ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
Using client As New WebClient

    Dim btcvalue As String = "https://blockchain.info/tobtc?currency=USD&value=1"
    Try
        Dim reply As String = client.DownloadString(btcvalue)
        TextBox1.Text = reply

    Catch webEx As WebException
        MessageBox.Show(webEx.Message)
        Exit Sub    
    End Try

End Using

您经常需要指定User Agent。但是,对于这个请求,您似乎不必这样做,但如果您这样做,它似乎必须是一个代理,它指的是比 IE 更现代的浏览器。例如:

client.Headers.Add("user-agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) " &
                                 "AppleWebKit/537.36 (KHTML, like Gecko) " &
                                 "Chrome/42.0.2311.135 Safari/537.36 Edge/12.246")

【讨论】:

  • 感谢您的帮助。问题不应该是 https 协议的事实是因为如果我将 'pastebin.com/raw/uUepG1iH' 作为地址,它会得到字符串。我添加了 client.Headers.Add。仍然有问题,添加捕获代码我得到错误:连接关闭:发送操作期间出现意外错误
  • 我在上面发布的代码对我有用。我从服务器收到“0.00010391”作为回复。注释掉ServicePointManager 行会导致上面提到的安全错误消息。据我所知,“pastebin.com/raw/uUepG1iH”不使用Https,因此无需更改协议类型即可工作。不确定如何在不指定 uri 方案的情况下使其与“pastebin.com/raw/uUepG1iH”一起使用。您应该发布您正在使用的确切代码,该代码会给您当前的错误。
  • ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12 --- Tls12 被标记为错误,而不是 Tls。
  • 您使用的是什么版本的 Windows 操作系统,以及什么版本的 .NET 框架?
  • 是 .NET 2.0 让您感到悲伤。服务器至少需要 TLS1.1,但您需要至少以 .NET 4.5 为目标才能在 SecurityProtocolType Enum 中使用该选项。我似乎记得早期的 .NET 版本有一种解决方法(涉及更改注册表值等),但不记得细节了。甚至可能不适用于按照今天的标准来说已经很古老的 .NET 2.0。需要谷歌一下。
猜你喜欢
  • 1970-01-01
  • 2012-07-08
  • 2016-08-28
  • 2013-06-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-02
相关资源
最近更新 更多