Получить данные с сайта

Я хочу получить специальные данные с сайта, но не знаю как.

Мне нужен исходный код vb.net, который помогает получать эти данные из Интернета каждые 5 секунд и разделять их в форме.

Как я могу этого добиться?

1 ответ

Похоже, что данные на веб-странице сжаты, поэтому, если вы пытались получить данные через WebClient.DownloadString, или WebClient.DownloadData, System.Text.Encoding.UTF8.GetString, тогда вы не получите читаемую строку. Строка может выглядеть так

? y?]? u??j?7?s?H4??N???{?vS(????7?N?±A?O?f??E???-?O??q)?m,:K?:?{Ij.??J?Uem??-K? Ni=KT???c?'? G?? -??]??A??? a?>??? o???????Ys??>?????? 5ga?? Z[? V??s?F????i? EU?/?+,??!? F?9? t?2;bG???(??Y!??oX??Gm??W???????Z???8????=?y?WU??9??7;z?^??????T??Y?8]bih??|N? ...

Вы можете видеть, что кодировка ответа сжимается следующим образом

client.ResponseHeaders(HttpResponseHeader.ContentEncoding)
' equals gzip

так просто

client.DownloadString(address)

приведет к сжатой строке. Чтобы учесть сжатие, используйтеSystem.IO.GZipStream декомпрессировать.

Этот код готов. Все, что вам нужно сделать, это создать новую форму, добавить новую метку и вставить ее.

Public Class Form1

    Private ReadOnly interval As Integer = 5000
    Private ReadOnly t As New System.Threading.Timer(AddressOf updateLabel, Nothing, -1, -1)
    Private ReadOnly address As String = "http://www.tsetmc.com/tsev2/data/instinfodata.aspx?i=35425587644337450&c=27+"

    Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
        t.Change(0, -1)
    End Sub

    Private Sub updateLabel(state As Object)
        Dim text As String
        Try
            text = getString(address)
            t.Change(interval, -1)
        Catch
            text = "error"
        End Try
        Label1.Invoke(Sub() Label1.Text = text)
    End Sub

    Private Shared Function getString(address As String) As String
        Dim text As String
        Using client As New Net.WebClient()
            Using stream = client.OpenRead(address)
                If client.ResponseHeaders(Net.HttpResponseHeader.ContentEncoding) = "gzip" Then
                    Using responseStream = New IO.Compression.GZipStream(stream, IO.Compression.CompressionMode.Decompress)
                        Using reader = New IO.StreamReader(responseStream)
                            text = reader.ReadToEnd()
                        End Using
                    End Using
                Else
                    Using reader = New IO.StreamReader(stream)
                        text = reader.ReadToEnd()
                    End Using
                End If
            End Using
        End Using
        Return text
    End Function

End Class

Приведенный выше код допускает сжатые или несжатые ответы. Если вы знаете, что он всегда сжимается, вы можете просто использовать это

Private Shared Function getString(address As String) As String
    Dim text As String
    Using client As New Net.WebClient()
        Using stream = client.OpenRead(address)
            Using responseStream = New IO.Compression.GZipStream(stream, IO.Compression.CompressionMode.Decompress)
                Using reader = New IO.StreamReader(responseStream)
                    text = reader.ReadToEnd()
                End Using
            End Using
        End Using
    End Using
    Return text
End Function

Теперь вы должны получить читаемую строку

12:29:37,A, 5254,5218,5203,5223,5277,5190,1727,16938744,88393224291,1,20191125,122937;98/9/4 14:31: 01, F, 308477.15,2703,04 0,88%, 11256322598042802,2998595530,15357456521865,388202, F, 986363991,12363278355103,190712, F, 606761,179231120000,6176,; 4 @ 63890 @ 5230 @ 5254 @ 100000 @2,4@ 120000 @522800 @ 525, @2@40000@5222@5259@221500@6,;65589,406538,760335;10352685,6586059,0,14312016,2626728,573,19,0,456,12;;;0;

Другие вопросы по тегам