tcpclient vs httpwebrequest - PullRequest
       1

tcpclient vs httpwebrequest

1 голос
/ 23 ноября 2010

Я использовал tcpclient для подключения к потоковому API и по какой-то причине он не работает с ошибкой 301 (что-то не так с моими учетными данными).Однако, когда я использую httpwebrequest к тому же API и использую те же учетные данные, и это работает.Я пытаюсь понять, что я делаю неправильно:

Соединение TCPclient:

            Try
            Dim bufferread(defaultSize) As Byte
           url = "xxxxxxxxx.com"
            Dim tclient As TcpClient = New TcpClient(url, "80")
            ' use a network stream to download the tcpClient stream
            nstream = tclient.GetStream()
            ' check if we can write to the stream to add the relevant headers and  credentials
            If nstream.CanWrite Then
                Dim headers As String
                headers = "GET " &  addedUrl & " HTTP/1.0" & Chr(13) & "" & Chr(10)
                headers &= "Authorization: Basic " & userNamePassword & Chr(13) & "" & Chr(10)
                headers &= Chr(13) & "" & Chr(10)
                Dim sendBytes As [Byte]() = Encoding.UTF8.GetBytes(headers)
                nstream.Write(sendBytes, 0, sendBytes.Length)
                If nstream.CanRead Then
                    Dim timestamp As DateTime = DateTime.Now
                    Dim data As String
                    numbytesRead = 0
                    ' start reading from the stream
                    Do....

httpwebrequest:

    While Not responseData = Nothing
        Try
            ' setup the webrequest and headers to send
            url = "https://xxxxxxxxxxxx.com" & addedUrl 
            If Not parsingTools.refreshDate = Nothing Then
                url = parsingTools.refreshDate
            End If
            Dim poststring As String = ""
            webrequest = TryCast(System.Net.WebRequest.Create(url), HttpWebRequest)
            webrequest.Method = "GET"
            webrequest.UserAgent = "xxxxxxxxxx"
            webrequest.Referer = "xxxxxxxxxxxxx"
            webrequest.Timeout = 20000
            webrequest.KeepAlive = True
            webrequest.Credentials = New System.Net.NetworkCredential ("xxxxxxxxxxxxx", "yyyyyyyyyyyyyy")

            'get the responsestream
            responseStream = webrequest.GetResponse().GetResponseStream()
           'check if stream is readable
            If responseStream.CanRead Then

1 Ответ

2 голосов
/ 23 ноября 2010

HTTP 301 - это не ошибка, это перенаправление.HttpWebRequest может прозрачно обрабатывать перенаправления, но если вы выполняете всю HTTP-реализацию самостоятельно с помощью TcpClient, то вам нужно проанализировать и выполнить перенаправление вручную.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...