C# 如何通过HTTP获取响应

C# 如何通过HTTP获取响应,c#,http,http-post,httprequest,httpresponse,C#,Http,Http Post,Httprequest,Httpresponse,我正在发送HTTP请求。我需要保存对该请求的HTTP响应 这是请求URL:http://notify.test.com/gateway.do?service=notify_verify&partner=2088¬ify_id=abcdefghijklmnopqrst 我试过的代码如下: HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://notify.test.com/gateway.do?service=n

我正在发送HTTP请求。我需要保存对该请求的HTTP响应

这是请求URL:
http://notify.test.com/gateway.do?service=notify_verify&partner=2088¬ify_id=abcdefghijklmnopqrst

我试过的代码如下:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://notify.test.com/gateway.do?service=notify_verify&partner=2088&notify_id=abcdefghijklmnopqrst");
        request.Proxy = WebProxy.GetDefaultProxy();
        request.Proxy.Credentials = CredentialCache.DefaultCredentials;
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();
        Stream resStream = response.GetResponseStream();

回答是真是假。我如何保存它?

如果您的需求很简单,
WebClient
可以做很多事情:

string result;
using(var client = new WebClient()) {
    client.Proxy = ...
    result = client.DownloadString(uri);
}

另请参见:
DownloadData
等。

如果您的要求很简单,
WebClient
可以做很多事情:

string result;
using(var client = new WebClient()) {
    client.Proxy = ...
    result = client.DownloadString(uri);
}

另请参见:
DownloadData
等。

如果您从
GetResponseStream()
获取
System.IO.Stream
,则
流提供了您可以继续阅读的
读取方法

using(Stream resStream = response.GetResponseStream()){ //release Stream after use
    if(resStream.CanRead){
        byte[] buffer = new byte[resStream.Length]; // or whatever
        if(resStream.Read(buffer, 0, resStream.Length) == 0) 
        {
            // end of Stream
        }
        else{
             //data received, work on buffer
        }
    }
}

有关
System.IO.Stream

的信息,请参见
System.IO.Stream
GetResponseStream()
获取
System.IO.Stream
Stream
为您提供了可以继续阅读的
读取方法

using(Stream resStream = response.GetResponseStream()){ //release Stream after use
    if(resStream.CanRead){
        byte[] buffer = new byte[resStream.Length]; // or whatever
        if(resStream.Read(buffer, 0, resStream.Length) == 0) 
        {
            // end of Stream
        }
        else{
             //data received, work on buffer
        }
    }
}
using(var resStream = response.GetResponseStream())
using(var reader = new StreamReader(resStream))
{
    var responseText = reader.ReadToEnd();
}

请参阅for
System.IO.Stream

在您的问题中包含API密钥不是一个好主意,因为这是一个公共网站。在您的问题中包含API密钥不是一个好主意,因为这是一个公共网站。这非常糟糕
阅读
代码;您没有检查
Read
的返回值,也没有根据流的结尾或内容长度头循环读取多个缓冲区。这说明了IMO的错误做法。对于这种特殊情况,这就足够了,因为OP只期望“真”或“假”。http的有趣之处在于,您需要处理比预期更多的事情。。。但即便如此:TCP中仍然没有任何内容表明您将在一个数据包中获取所有“真”或“假”。好的,但这取决于编码者,OP将需要确定这是非常糟糕的
读取
代码;您没有检查
Read
的返回值,也没有根据流的结尾或内容长度头循环读取多个缓冲区。这说明了IMO的错误做法。对于这种特殊情况,这就足够了,因为OP只期望“真”或“假”。http的有趣之处在于,您需要处理比预期更多的事情。。。但即便如此:TCP中仍然没有任何内容表明您将在单个数据包中获取所有“真”或“假”。好的,但这取决于编码器,OP需要确定这一点。当我在aspx页面中使用您的代码块时,结果是“假”或“真”。但当我尝试从自定义Http处理程序发送请求,并将值传递到数据库中的“partner”和“notify_id”时,结果是一个XML-
Fmessage
。为什么这么奇怪?我想要状态,当然是
值。因此,
结果
包含一个xml。我编写了
XmlTextReader rdr=newxmltextreader(newsystem.IO.StringReader(result))。如何从xml阅读器读取
值?@Sandy最简单的方法是加载到DOM中。XmlDocument可能是当我在aspx页面中使用您的代码块时,结果是“False”或“True”。但当我尝试从自定义Http处理程序发送请求,并将值传递到数据库中的“partner”和“notify_id”时,结果是一个XML-
Fmessage
。为什么这么奇怪?我想要状态,当然是
值。因此,
结果
包含一个xml。我编写了
XmlTextReader rdr=newxmltextreader(newsystem.IO.StringReader(result))。如何从xml阅读器读取
值?@Sandy最简单的方法是加载到DOM中。也许是XML文档
using(var resStream = response.GetResponseStream())
using(var reader = new StreamReader(resStream))
{
    var responseText = reader.ReadToEnd();
}