用c#解析原始HTTP响应以获得状态码



是否有一种简单的方法来解析HTTP响应字符串,如:

"HTTP/1.1 200 OKrnContent-Length: 1433rnContent-Type: text/htmlrnContent-Location: http://server/iisstart.htmrnLast-Modified: Fri, 21 Feb 2003 23:48:30 GMTrnAccept-Ranges: bytesrnETag: "09b60bc3dac21:1ca9"rnServer: Microsoft-IIS/6.0rnX-Po"

我想要得到状态码。我不一定需要将其转换为HttpResponse对象,但这将是可以接受的,以及解析出状态代码。我能把它解析成HttpStatusCode enum吗?

我正在使用基于套接字的方法,不能改变我获得响应的方式。我将只有这个字符串的工作

EDIT考虑到"我正在使用基于套接字的方法,不能改变我得到响应的方式。我将只有这个字符串与"。

怎么样
  string response = "HTTP/1.1 200 OKrnContent-Length: 1433rnContent-Type: text/htmlrnContent-Location: http://server/iisstart.htmrnLast-Modified: Fri, 21 Feb 2003 23:48:30 GMTrnAccept-Ranges: bytesrnETag: "09b60bc3dac21:1ca9"rnServer: Microsoft-IIS/6.0rnX-Po";
  string code = response.Split(' ')[1];
  // int code = int.Parse(response.Split(' ')[1]);

我最初建议这样做:

  HttpWebRequest webRequest =(HttpWebRequest)WebRequest.Create("http://www.gooogle.com/");
  webRequest.AllowAutoRedirect = false;
  HttpWebResponse response = (HttpWebResponse)webRequest.GetResponse();
  int statuscode = (int)response.StatusCode)

HTTP是一个非常简单的协议,下面的代码应该可以非常可靠地输出状态码(更新后更加健壮):

int statusCodeStart = httpString.IndexOf(' ') + 1;
int statusCodeEnd = httpString.IndexOf(' ', statusCodeStart);
return httpString.Substring(statusCodeStart, statusCodeEnd - statusCodeStart);

如果你真的想,你可以添加一个完整性检查,以确保字符串以"HTTP"开头,但如果你想要健壮性,你也可以实现一个HTTP解析器。

老实说,这可能会做!: -)

httpString.Substring(9, 3);

如果它只是一个字符串,你可以不只是使用正则表达式提取状态码?

按照DD59的建议做,或者使用正则表达式

这将更新标记的答案以处理一些极端情况:

    static HttpStatusCode? GetStatusCode(string response)
    {
        string rawCode = response.Split(' ').Skip(1).FirstOrDefault();
        if (!string.IsNullOrWhiteSpace(rawCode) && rawCode.Length > 2)
        {
            rawCode = rawCode.Substring(0, 3);
            int code;
            if (int.TryParse(rawCode, out code))
            {
                return (HttpStatusCode)code;
            }
        }
        return null;
    }

由于状态码的格式保持不变,您可能可以使用这样的格式。

var responseArray = Regex.Split(response, "rn");
 if(responseArray.Length)>0
 {
 var statusCode = (int)responseArray[0].split(' ')[1];
 }

相关内容

  • 没有找到相关文章

最新更新