添加请求头与WebClient c#

本文关键字:WebClient 请求 添加 | 更新日期: 2023-09-27 18:10:06

我有以下代码,我下载一个网页到一个字节数组,然后用响应打印它。写:

WebClient client = new WebClient();
byte[] data = client.DownloadData(requestUri);
  /***********        Init response headers    ********/
  WebHeaderCollection responseHeaders = client.ResponseHeaders;
  for (int i = 0; i < responseHeaders.Count; i++)
       {
            Response.Headers.Add(responseHeaders.GetKey(i), responseHeaders[i]);
       }
  /***************************************************/

除了响应标头,我还需要添加请求标头。我试着用下面的代码来做:

  /***********        Init request headers    ********/
  NameValueCollection requestHeaders = Request.Headers;
  foreach (string key in requestHeaders)
  {
      client.Headers.Add(key, requestHeaders[key]);
  }
  /***************************************************/

但是它不工作,我得到以下异常:

这个头必须使用适当的属性修改。参数名称:name

有谁能帮我一下吗?用WebClient添加请求头的正确方法是什么?

谢谢。

添加请求头与WebClient c#

报头集合"保护" msdn页面上描述的一些可能的报头:http://msdn.microsoft.com/en-us/library/system.net.webclient.headers.aspx

那一页似乎给了你需要的所有答案,但引用了重要的部分:

一些常见的头文件被认为是受限的,由不能在WebHeaderCollection对象中设置或更改。类中设置这些受限标头之一的任何尝试WebHeaderCollection对象与WebClient对象相关联稍后尝试发送WebClient时抛出异常请求。

受系统保护的受限头文件包括,但不是限于以下内容:

Date
Host

此外,其他一些头文件在使用a时也受到限制WebClient对象。这些受限头文件包括,但不是限于以下内容:

Accept
Connection
Content-Length
Expect (when the value is set to "100-continue"
If-Modified-Since
Range
Transfer-Encoding

HttpWebRequest类具有用于设置上述某些属性的属性头。如果对应用程序来说设置这些头信息很重要,那么应该使用HttpWebRequest类而不是WebRequest类。

我怀疑这样做的原因是许多头,如日期和主机必须在不同的请求上设置不同。你不应该抄袭他们。事实上,我个人可能会建议你不应该抄袭其中任何一个。放入你自己的用户代理——如果你获得的页面依赖于某个值,那么我认为你要确保你总是发送一个有效值,而不是依赖于原始用户给你的信息。

本质上是找出你需要做什么,而不是在没有完全理解你在做什么的情况下找到一些有效的方法来做。

看起来你正在尝试设置一些头必须使用WebClient属性(CachePolicy, ContentLengthContentType)之一设置

此外,盲目地复制所有的标题是不太好的,你只需要得到那些你真正需要的。