从WebRequest获取标头

时间:2013-11-22 10:52:30

标签: c# webrequest

从技术上讲,我正在问一个写VB的朋友的问题,但我发布了C#,因为有更多的人在上面。我个人也不知道。

我正在帮助他连接到Mobile Backend即服务,虽然他设置的方式是代表有人用ASP.net加载他自己的网页(我认为)。

我正在使用Python连接到服务。但他得到了422服务器响应。我想比较请求标题和&他和我之间的内容差异。

根据下面的Chris Doggett的post on this page,在实际发送请求之前,您无法获取标头。但是,只要调用request.GetResponse(),Visual Studio(或Express,不确定)似乎只是停在那里的断点,并说在浏览器上有422错误和一些错误消息。因此,他无法到达他希望打印标题的下一行。

两个问题:

  1. 是否开启了某种调试?我认为422响应是一个响应,程序不应该只是停在那里。
  2. 如何打印内容,而不仅仅是标题?最好,我想用文本打印出整个请求。有这些东西是用JSON发送的,我不认为它属于标题,但我不太确定。

1 个答案:

答案 0 :(得分:5)

Create方法将为http / https网址返回HttpWebRequest422 status code表示您以某种方式向服务器发送了错误的格式化数据。 GetResponse()会抛出WebException,因为您没有收到 状态代码200

要获取处理异常所需的响应的实际标题

private static void Main(string[] args)
{
    WebRequest request = WebRequest.Create("http://google.com/12345"); //generate 404

    try
    {

        WebResponse response = request.GetResponse();
    }
    catch(WebException ex)
    {
        HttpWebResponse errorResponse = ex.Response as HttpWebResponse;

        if (errorResponse == null)
            throw; //errorResponse not of type HttpWebResponse

        string responseContent = "";

        using(StreamReader r = new StreamReader(errorResponse.GetResponseStream()))
        {
            responseContent = r.ReadToEnd();
        }

        Console.WriteLine("The server at {0} returned {1}", errorResponse.ResponseUri, errorResponse.StatusCode);

        Console.WriteLine("With headers:");
        foreach(string key in errorResponse.Headers.AllKeys)
        {
            Console.WriteLine("\t{0}:{1}", key, errorResponse.Headers[key]);
        }

        Console.WriteLine(responseContent);
    }

    Console.ReadLine();
}