【问题标题】:How to read a WebClient response after posting data?发布数据后如何读取 WebClient 响应?
【发布时间】:2010-11-04 03:16:16
【问题描述】:

看代码:

using (var client = new WebClient())
{
    using (var stream = client.OpenWrite("http://localhost/", "POST"))
    {
        stream.Write(post, 0, post.Length);
    }
}

现在,我如何读取 HTTP 输出?

【问题讨论】:

标签: c# .net webclient


【解决方案1】:

您似乎有 byte[] 的数据要发布;在这种情况下,我希望您会发现它更易于使用:

byte[] response = client.UploadData(address, post);

如果响应是文本,则类似于:

string s = client.Encoding.GetString(response);

(或您选择的Encoding - 也许Encoding.UTF8

【讨论】:

  • 如果我不尝试读取 HTTP 500 响应,它会起作用,这会变成一个例外。但你的回答肯定符合问题的要求。
  • 你可能想澄清这个问题;它可能涉及使用 HttpWebRequest...
  • 你没有回答问题:(
  • @MarcGravell 你能相信 UploadData 方法将整个文件上传包装成多部分,这在这个地方不需要,并且 Ops 使用在这种情况下更受欢迎的方法。
【解决方案2】:

如果您想在任何地方保留流并避免分配大量字节数组,这是一种很好的做法(例如,如果您打算发布大文件),您仍然可以使用 WebClient 的派生版本来做到这一点。这是一个示例代码。

using (var client = new WebClientWithResponse())
{
    using (var stream = client.OpenWrite(myUrl))
    {
        // open a huge local file and send it
        using (var file = new FileStream(filePath, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
        {
            file.CopyTo(stream);
        }
    }

    // get response as an array of bytes. You'll need some encoding to convert to string, etc.
    var bytes = client.Response;
}

这是自定义的 WebClient:

public class WebClientWithResponse : WebClient
{
    // we will store the response here. We could store it elsewhere if needed.
    // This presumes the response is not a huge array...
    public byte[] Response { get; private set; }

    protected override WebResponse GetWebResponse(WebRequest request)
    {
        var response = base.GetWebResponse(request);
        var httpResponse = response as HttpWebResponse;
        if (httpResponse != null)
        {
            using (var stream = httpResponse.GetResponseStream())
            {
                using (var ms = new MemoryStream())
                {
                    stream.CopyTo(ms);
                    Response = ms.ToArray();
                }
            }
        }
        return response;
    }
}

【讨论】:

    猜你喜欢
    • 2018-02-07
    • 2011-02-21
    • 1970-01-01
    • 1970-01-01
    • 2012-12-05
    • 2019-07-14
    • 1970-01-01
    • 1970-01-01
    • 2021-09-17
    相关资源
    最近更新 更多