Есть способ получить необработанные заголовки:
var rawHeaders = request.GetResponse().Headers.ToString();
С вашего веб-сайта и запросом вы вернули:
Pragma: no-cache
X-Frame-Options: SAMEORIGIN
Cache-Control: no-cache, must-revalidate, max-age=0
Date: Wed, 03 Aug 2011 12:08:49 GMT
Expires: Wed, 11 Jan 1984 05:00:00 GMT
Set-Cookie: wordpress_test_cookie=WP+Cookie+check; path=/,wordpress_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/wp-admin,wordpress_sec_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/wp-admin,wordpress_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/wp-content/plugins,wordpress_sec_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/wp-content/plugins,wordpress_logged_in_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpress_logged_in_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpress_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpress_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpress_sec_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpress_sec_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpressuser_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpresspass_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpressuser_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/,wordpresspass_c2d1208bd3bc2294298da94d67693495=+; expires=Tue, 03-Aug-2010 12:08:49 GMT; path=/
Server: Apache
X-Powered-By: PHP/5.2.17
Last-Modified: Wed, 03 Aug 2011 12:08:49 GMT
Content-Type: text/html; charset=UTF-8
X-Cache: MISS from localhost
X-Cache-Lookup: MISS from localhost:3128
Via: 1.0 localhost (squid/3.1.6)
Connection: close
Решает ли это вашу проблему?
О сокетах вместо веб-запросов - я бы рекомендовал против такого подхода. Он изобретает колесо.
UPDATE
Это не решает проблему, так как вышеуказанные заголовки уже проанализированы с потерями (подробности см. В комментариях). При ближайшем рассмотрении я пришел к выводу, что необработанные байты заголовка уже потеряны после HttpWebRequest.GetResponse()
.
Разбор ядра выполняется в System.Net.WebHeaderCollection.ParseHeaders()
или System.Net.WebHeaderCollection.ParseHeadersStrict()
(в зависимости от значения System.Net.Configuration.SettingsSectionInternal.Section.UseUnsafeHeaderParsing
), и оба метода не могут записать требуемую информацию. Вскоре после этого буфер, с которым они работают (System.Net.Connection.m_ReadBuffer
), заполняется новыми данными с провода. Оригинальные заголовки потеряны.
Чтобы сохранить необработанные данные, вам потребуется переопределить класс System.Net.Connection
, который является внутренним и жестко связан с ServicePoint, который является общедоступным, но по-прежнему жестко связан с HttpWebRequest. Подводя итог, вам придется переопределить весь стек.
Таким образом, если вы не можете изменить поведение веб-сайта или жить без этих файлов cookie, вам потребуется использовать Socket. Если это так, я хотел бы выразить свои соболезнования.