信息
您所需的主题如下所示。但此主题未包含在此库中。

HttpWebRequest 类

2013/12/13

提供 WebRequest 类的 HTTP 特定的实现。

System.Object
  System.Net.WebRequest
    System.Net.HttpWebRequest

Namespace:  System.Net
程序集:  System.Net(位于 System.Net.dll 中)

public class HttpWebRequest : WebRequest

HttpWebRequest 类型公开以下成员。

  名称说明
受保护的方法HttpWebRequest初始化 HttpWebRequest 类的新实例。
返回顶部

  名称说明
公共属性Accept获取或设置 Accept HTTP 标头的值。
公共属性AllowAutoRedirect获取或设置一个值,该值指示请求是否应跟随重定向响应。
公共属性AllowReadStreamBuffering如果已在子类中重写,则获取或设置一个值,该值指示是否对从 Internet 资源读取的数据进行缓冲处理。
公共属性AllowWriteStreamBuffering获取或设置一个值,该值指示是否对发送到 Internet 资源的数据进行缓冲处理。
公共属性ContentLength为设置客户端发送的内容长度(以字节计)而获取。 (重写 WebRequest.ContentLength。)
公共属性ContentType获取或设置 Content-type HTTP 标头的值。 (重写 WebRequest.ContentType。)
公共属性CookieContainer指定与 HTTP 请求相关联的 CookieCollection 对象的集合。
公共属性CreatorInstance当在子类中重写时,获取从 IWebRequestCreate 类派生的工厂对象,该类用于创建为生成对指定 URI 的请求而实例化的 WebRequest (从 WebRequest 继承。)
公共属性Credentials获取或设置请求的身份验证信息。 (重写 WebRequest.Credentials。)
公共属性HaveResponse获取一个值,该值指示是否已收到来自 Internet 资源的响应。
公共属性Headers指定一个组成 HTTP 标头的名称/值对集合。 (重写 WebRequest.Headers。)
公共属性Method获取或设置请求的方法。 (重写 WebRequest.Method。)
公共属性RequestUri获取请求的原始统一资源标识符 (URI)。 (重写 WebRequest.RequestUri。)
公共属性SupportsCookieContainer获取一个值,该值指示 CookieContainer 属性是否由 HttpWebRequest 实例支持。
公共属性UseDefaultCredentials当在子代类中重写时,获取或设置一个 Boolean 值,该值控制默认凭据是否随请求一起发送。 (从 WebRequest 继承。)
公共属性UserAgent获取或设置 User-agent HTTP 标头的值。
返回顶部

  名称说明
公共方法Abort取消对 Internet 资源的请求。 (重写 WebRequest.Abort()。)
公共方法BeginGetRequestStream开始对用来写入数据的 Stream 对象的异步请求。 (重写 WebRequest.BeginGetRequestStream(AsyncCallback, Object)。)
公共方法BeginGetResponse开始对 Internet 资源的异步请求。 (重写 WebRequest.BeginGetResponse(AsyncCallback, Object)。)
公共方法EndGetRequestStream结束对用于写入数据的 Stream 对象的异步请求。 (重写 WebRequest.EndGetRequestStream(IAsyncResult)。)
公共方法EndGetResponse结束对 Internet 资源的异步请求。 (重写 WebRequest.EndGetResponse(IAsyncResult)。)
公共方法Equals(Object)确定指定的 Object 是否等于当前的 Object (从 Object 继承。)
受保护的方法Finalize释放当前 HttpWebRequest 实例所持有的资源。 (重写 Object.Finalize()。)
公共方法GetHashCode用作特定类型的哈希函数。 (从 Object 继承。)
公共方法GetType获取当前实例的 Type (从 Object 继承。)
受保护的方法MemberwiseClone创建当前 Object 的浅表副本。 (从 Object 继承。)
公共方法ToString返回一个字符串,它表示当前的对象。 (从 Object 继承。)
返回顶部

  名称说明
公共扩展方法GetCurrentNetworkInterface获取有关与 Web 请求相对应的网络接口的所有可用信息。 (由 WebRequestExtensions 定义。)
公共扩展方法SetNetworkPreference设置 Web 请求的首选项,以使用蜂窝或非蜂窝技术。 (由 WebRequestExtensions 定义。)
公共扩展方法SetNetworkRequirement设置 Web 请求的要求,以使用蜂窝或非蜂窝技术。 (由 WebRequestExtensions 定义。)
返回顶部

HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对使用户能够直接与使用 HTTP 的服务器交互的附加属性和方法提供支持。

不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法初始化新的 HttpWebRequest 对象。如果统一资源标识符 (URI) 的方案是 http://https://,则 WebRequest.Create 返回 HttpWebRequest 对象。

可以使用 BeginGetResponseEndGetResponse 方法对资源发出异步请求。

BeginGetRequestStreamEndGetRequestStream 方法提供对发送数据流的异步访问。

如果在访问资源时发生错误,则 HttpWebRequest 类将引发 WebExceptionWebException.Status 属性包含指示错误源的 WebExceptionStatus 值。

HttpWebRequest 将发送到 Internet 资源的公共 HTTP 标头值公开为属性,由方法或系统设置;下表包含完整列表。可以将 Headers 属性中的其他标头设置为名称/值对。注意,服务器和缓存在请求期间可能会更改或添加标头

Referer 标头在所有 HTTP 请求上正确设置,适用于 ClientHttp 的客户端 HTTP 处理。

Item 属性可用于设置自定义标头。

如果本地配置指定使用代理,或者如果请求指定代理,则使用代理发送请求。如果未指定代理,则请求发送到服务器。

说明注意:

为安全起见,默认情况下禁用 Cookie。

对跨域连接的支持允许应用程序从不是原始站点的位置访问资源。这是一个重要的功能,使应用程序可以使用 Web 上的现有服务。

安全策略系统要求必须从某一网络资源下载某一策略文件,然后才允许网络连接访问该资源。此安全策略系统影响 WebClient 的跨域网络访问以及 System.Net 命名空间中的 HTTP 类。用于 WebClient 的网络连接以及针对源站点或源主机的 HTTP 类不要求某一安全策略。

出于安全原因,限制从 System.Net 命名空间中的 WebClient 和 HTTP 类对某些 URL 类的访问。存在若干对其他类应用的类似访问限制,这些类包括 System.Windows.Controls 命名空间中的 ImageMediaElement 类。还基于 URL 的类对 XAML 源文件和字体文件应用访问限制。

影响的连接是对跨区域、跨域和跨方案 URL 的访问。这些限制旨在用于阻止网络威胁。

出于安全原因,除非特定标头得到适用于目标跨域站点的安全策略的允许,否则,将限制 HttpWebRequest 类将特定标头发送到跨域站点。此限制适用于来自原始网站之外的地点的资源。使用 Headers 属性可设置 Authorization 标头。但是,若要正确地设置凭据,适用于该目标的跨域策略必须具有 HTTP 请求标头设置,以允许发送授权标头。

同时允许六个活动 Web 服务连接。其他请求将暂停,直到连接可用。

功能

如果您在应用中使用此 API,您必须在应用清单中指定下列功能。否则,您的应用可能无法正常工作,或可能意外退出。

ID_CAP_NETWORKING

Windows Phone 8, Windows Phone OS 7.1

有关更多信息,请参见 Windows Phone 应用的功能和硬件要求


public class RequestState
{
  // This class stores the State of the request.
  const int BUFFER_SIZE = 1024;
  public StringBuilder requestData;
  public byte[] BufferRead;
  public HttpWebRequest request;
  public HttpWebResponse response;
  public Stream streamResponse;

  public RequestState()
  {
    BufferRead = new byte[BUFFER_SIZE];
    requestData = new StringBuilder("");
    request = null;
    streamResponse = null;
  }
}

public class Example
{

  public static ManualResetEvent allDone= new ManualResetEvent(false);
  const int BUFFER_SIZE = 1024;

  public static void Demo(System.Windows.Controls.TextBlock outputBlock)
  {
      try
      {
          System.Uri uri = new Uri("http://www.contoso.com");

          // Create a HttpWebrequest object to the desired URL.
          HttpWebRequest myHttpWebRequest1= (HttpWebRequest)WebRequest.Create(uri);

          // Create an instance of the RequestState and assign the previous myHttpWebRequest1
          // object to it's request field.  
          RequestState myRequestState = new RequestState();  
          myRequestState.request = myHttpWebRequest1;

          // Start the asynchronous request.
          IAsyncResult result=
          (IAsyncResult) myHttpWebRequest1.BeginGetResponse(new AsyncCallback(RespCallback),myRequestState);

          allDone.WaitOne();

          // Release the HttpWebResponse resource.
          myRequestState.response.Close();
      }
      catch(WebException e)
      {
          outputBlock.Text += "\nException raised!\n";
          outputBlock.Text += "Message: ";
          outputBlock.Text += e.Message;
          outputBlock.Text += "\nStatus: ";
          outputBlock.Text += e.Status;
          outputBlock.Text += "\n";
      }
      catch(Exception e)
      {
          outputBlock.Text += "\nException raised!\n";
          outputBlock.Text += "\nMessage: ";
          outputBlock.Text += e.Message;
          outputBlock.Text += "\n";
      }
  }

  private static void RespCallback(IAsyncResult asynchronousResult)
  {  
      try
      {
          // State of request is asynchronous.
          RequestState myRequestState=(RequestState) asynchronousResult.AsyncState;
          HttpWebRequest  myHttpWebRequest2=myRequestState.request;
          myRequestState.response = (HttpWebResponse) myHttpWebRequest2.EndGetResponse(asynchronousResult);

          // Read the response into a Stream object.
          Stream responseStream = myRequestState.response.GetResponseStream();
          myRequestState.streamResponse=responseStream;

          // Begin the Reading of the contents of the HTML page and print it to the console.
          IAsyncResult asynchronousInputRead = responseStream.BeginRead(myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
      }
      catch(WebException e)
      {
          // Need to handle the exception
          // ...

          Debug.WriteLine(e.Message);
      }
  }

  private static  void ReadCallBack(IAsyncResult asyncResult)
  {
      try
      {
          RequestState myRequestState = (RequestState)asyncResult.AsyncState;
          Stream responseStream = myRequestState.streamResponse;
          int read = responseStream.EndRead( asyncResult );

          // Read the HTML page and then do something with it
          if (read > 0)
          {
              myRequestState.requestData.Append(Encoding.UTF8.GetString(myRequestState.BufferRead, 0, read));
              IAsyncResult asynchronousResult = responseStream.BeginRead( myRequestState.BufferRead, 0, BUFFER_SIZE, new AsyncCallback(ReadCallBack), myRequestState);
          }
          else
          {
              if(myRequestState.requestData.Length>1)
              {
                  string stringContent;
                  stringContent = myRequestState.requestData.ToString();
                  // do something with the response stream here
              }

              responseStream.Close();
              allDone.Set();     
          }
      }
      catch(WebException e)
      {
          // Need to handle the exception
          // ...

          Debug.WriteLine(e.Message);
      }
  }


Windows Phone OS

受以下版本支持: 8.0, 7.1, 7.0

Windows Phone

此类型的所有公共 static(在 Visual Basic 中为 Shared) 成员都是线程安全的。但不保证所有实例成员都是线程安全的。

显示: