Как читать только заголовки из ответа и отменить все остальное с помощью C #?

1

сервер, с которым я хочу работать с ним, возвращает 302 Found с несколькими байтами тела здесь является необработанным

HTTP/1.1 302 Found
Server: unknown
Date: Sun, 29 Jun 2014 20:12:14 GMT
Content-Type: text/html; charset=utf-8
Connection: close
P3P: CP="CAO PSA OUR"
x-powered-by: 
Set-Cookie: session=604d0bdba04eb54793ec2f3c98b2a37e; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: www.mysite.com/login.php?session=604d0bdba04eb54793ec2f3c98b2a37e
Vary: Accept-Encoding
Content-Length: 18163

этот кусок тела я хочу отменить его от загрузки:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge"/>
///////body bytes about 18kb///////
</html>

вот мой код, обрабатывающий ответ, используя асинхронный запрос:

  Dim request As HttpWebRequest = CType(asynchronousResult.AsyncState, HttpWebRequest)


        Dim BYTES_TO_READ As Integer = 0
        Dim buffer = New Byte(BYTES_TO_READ - 1) {}

        Using response As HttpWebResponse = CType(request.EndGetResponse(asynchronousResult), HttpWebResponse)
            Using sm As Stream = response.GetResponseStream()
                Dim totalBytesRead As Integer = 0
                Dim bytesRead As Integer
                Do
                    bytesRead = sm.Read(buffer, totalBytesRead, BYTES_TO_READ - totalBytesRead)
                    totalBytesRead += bytesRead
                Loop While totalBytesRead < BYTES_TO_READ
                request.Abort()
                response.Close()
                sm.Close()
            End Using
        End Using
        Dim s = Encoding.Default.GetString(buffer)
       Console.WriteLine(s)
    Catch ex As WebException
        Exit Sub
    End Try

выход равен нулю, но ответ полностью загружен! и я хочу пропустить это, я хочу только заголовки и отменить весь остальной response stream

поэтому есть ли способ читать только заголовки и отменить все оставшиеся байты

  • 0
    Если вам не нужны данные, не читайте их. Просто распоряжайся всем.
  • 0
    @usr спасибо за вашу поддержку! и когда я распоряжаюсь всем, могу ли я читать заголовки? а байты тела не будут загружаться?
Показать ещё 1 комментарий
Теги:
stream
byte
response

1 ответ

2

Чтобы прочитать заголовки, вы должны проверить коллекцию response.Headers, не вызывая GetResponseStream. Вы пробовали это, все тело загружено в любом случае?

Еще одна вещь, которую вы можете попробовать - это запросить данные, используя запрос "HEAD". Он специально предназначен для извлечения только заголовков, всегда без тела.

  • 0
    этот ответ является результатом "POST" я не могу использовать "HEAD"
  • 0
    Я считаю, что это неизбежно и продиктовано http - если вы начали загружать HTTP-ответ, вам также необходимо скачать тело. Возможно, пользовательская реализация http может разорвать соединение после получения заголовка, но это будет нарушением протокола. Почему вы пытаетесь оптимизировать это? Для экономии трафика? Его только 18 КБ
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню