我知道你们都会回答“使用像 Fiddler 这样的调试代理服务器”,但事情没有那么简单。
我的情况是这样的: 我有一些运行在服务器上的代码,在一个 ASP.NET 页面代码隐藏(aspx.cs)中,它(在其他事情中)建立到 另一个服务器的连接,抓取一些东西,然后格式化它并返回给浏览器。
问题是另一台服务器正在做错误的事情,因此我希望能够将一个调试标志传递到页面中(通过查询字符串,例如?Debug = true) ,这样它将打印出发送给其他服务器的 完全原始 HTTP 请求,这样我就可以看到到底出了什么问题。这段代码在几个地方运行,所以我希望能够在开发、准备或生产环境中传递这个标志,只看到请求,而不必弄清楚生产服务器是否可以与某个地方存在的代理服务器通信,等等。
你以为这很容易,对吧?所以我觉得我是疯了还是怎么的,但是我看了 HttpWebRequest 的引用和它的父类 WebRequest,什么都没有。不行。你可能会认为微软会考虑到这一点。最接近的情况是,你可以访问“ Header”集合,但是当我尝试它时,它忽略了一些真正重要的标题,比如“ content length”——所以它一定是在“撒谎”(我知道它在撒谎,因为我知道远程服务器正在返回一个200状态——请求成功了,它只是返回错误的/不同的/错误的数据)
下面是请求的代码示例:
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.whatever.com");
req.Method = ... whatever ...;
... other setup for the request ...
/* At this point we are about to send the request.
What does the raw HTTP request look like? */
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();