对于System.Net.Http的学习(三)——使用 HttpClient 检索与获取过程数据
对于System.Net.Http的学习(一)——System.Net.Http 简介
对于System.Net.Http的学习(二)——使用 HttpClient 进行连接
如何使用 HttpClient 处理程序
将 HttpClientHandler 类与 System.Net.Http 命名空间中的 HttpClient 类结合使用,以向 Web Service发送 GET 请求并检索响应。
HttpClient 类用于通过 HTTP 发送和接收基本要求。它提供了一个用于从 URI 所标识的资源发送 HTTP 请求和接收 HTTP 响应的基类。该类可用来向 Web 服务发送 GET、PUT、POST、DELETE 以及其他请求。上述每种请求都作为异步操作进行发送。
HttpClientHandler 类是 HttpClient 的默认消息处理程序。HttpClientHandler 类以及从该类派生的类让开发人员可以对 HTTP 请求配置从代理到身份验证的一系列选项。
一: 创建新项目
打开 Microsoft Visual Studio 2010,然后从“文件”菜单中选择“新建项目”。在模板列表中,选择 Visual C#。在该区域下面,选择“Windows”,然后选择“Windows窗体应用程序”。将该应用程序命名为 HttpClientHandlerSample,然后单击“确定”。
二: 添加 WINDOWS UI
在本节中,我们将在 Windows Form 中定义应用的布局,以指定应用中每个对象的大小和位置。 通过添加显示数据的控件和内容,我们已经完成了应用的用户界面。如下图。

三: 创建 HttpClientHandler,发送 GET 请求并检索响应
以下示例代码将首先创建 HttpClientHandler 对象。该代码还将对该对象设置一个属性,并使用 HttpClientHandler 创建一个 HttpClient 对象。
- 首先创建 HttpClientHandler 对象。将 AllowAutoRedirect 属性设置为 false。此示例显示了如何使用 HttpClientHandler 属性来设置有关 HTTP 请求的选项。
AllowAutoRedirect 属性指示 HttpClientHandler 对象的请求是否应遵循重定向响应。此属性的默认值是 true。如果此属性被设置为 false,则不会遵循 Web 服务的重定向请求。
然后,使用 HttpClientHandler 对象创建 HttpClient 对象。我们还在 HttpClient 对象上设置两个属性。HttpClient.MaxResponseContentBufferSize 属性的默认大小是整数的最大大小。为了限制应用作为来自 Web 服务的响应接受的数据量,我们将此属性设置为一个较小的值。
默认情况下,HttpClient 对象不会将用户代理标头随 HTTP 请求一起发送到 Web 服务。某些 HTTP 服务器(包括某些 Microsoft Web 服务器)要求从客户端发送的 HTTP 请求附带用户代理标头,并且如果没有标头,则返回错误。为了避免这些错误,示例使用 HttpClient.DefaultRequestHeaders 属性添加了用户代理标头。
打开 Form1.cs 文件,然后将如下代码添加到该文件中。
private HttpClient httpClient;
private HttpClientHandler handler;
public void Init()
{
txtUrl.Text = "http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl";
handler = new HttpClientHandler();
handler.AllowAutoRedirect=false;
httpClient = new HttpClient(handler);
// Limit the max buffer size for the response so we don't get overwhelmed
httpClient.MaxResponseContentBufferSize = ;
// Add a user-agent header
httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
}
2. 发送 GET 请求并检索响应。
在单击“请求”按钮之后,txtStatusText 和 txtMsg两个文本框中的文本将被更新,然后使用输入到txtUrl文本框中的 URI 地址发送 HTTP GET 请求并等待响应。如果发生错误或异常,错误信息会显示在 txtStatusText文本框中。如果没有错误发生,则来自该 Web 服务的响应将显示在 txtMsg文本框中。
说明:
在 visual studio 2012 中的 C# 和 Visual Basic 中可以使用 await 关键字时,发送 GET 请求并异步检索响应的代码与我们用于同步完成该操作的代码相似。只有在该方法被定义为 async 时,才能使用 await 关键字。
如果 Web 服务器返回 HTTP 错误状态代码,则 HttpResponseMessage.EnsureSuccessStatusCode 方法将引发异常。 如果发生错误,则对任何异常使用 try/catch 块,并把错误信息显示在txtStatusText 文本框中的异常消息。在 try 块中,显示 Web 服务所返回的状态和响应。
HttpResponseMessage.Content 属性声明 HTTP 响应的内容。HttpContent.ReadAsStringAsync 方法将 HTTP 内容作为异步操作写入到字符串中。
private void btnRequest_Click(object sender, EventArgs e)
{
try
{
txtMsg.Text=string.Empty;
txtStatusText.Text = "等待请求返回 ...";
var task = httpClient.GetAsync(txtUrl.Text);
task.Result.EnsureSuccessStatusCode();
HttpResponseMessage response = task.Result;
txtStatusCode.Text = response.StatusCode + " " + response.ReasonPhrase + Environment.NewLine;
txtStatusText.Text = "请求返回结果如下 ...";
var result = response.Content.ReadAsStringAsync();
string responseBodyAsText = result.Result;
responseBodyAsText = responseBodyAsText.Replace("<br>", Environment.NewLine); // Insert new lines
txtMsg.Text=responseBodyAsText;
}
catch (HttpRequestException hre)
{
txtStatusText.Text = hre.ToString();
}
catch (Exception ex)
{
txtStatusText.Text = ex.ToString();
}
}
备注
在本文中,我们介绍了如何将 HttpClientHandler 与 HttpClient 类结合使用,以向 Web 服务发送 GET 请求,以及如何使用 HttpResponseMessage 和 HttpContent 类检索响应。HttpClientHandler 允许应用设置有关 HTTP 请求的选项。
有一些 HTTP 消息处理程序可以与 HttpClient 类结合使用。
- HttpClientHandler - 本文中 HttpClient 所用的默认消息处理程序。
- MessageProcessingHandler - 一种基本的 HTTP 消息处理程序。这是最容易进行派生的处理程序,应该作为大多数自定义处理程序的起点。
- DelegatingHandler - 一种基本的 HTTP 处理程序,可将 HTTP 响应消息的处理委派给其他处理程序。
完整示例:
HttpClientHandler 示例
C# using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Net.Http; namespace HttpClientHandlerSample
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
Init();
} private HttpClient httpClient;
private HttpClientHandler handler; public void Init()
{
txtUrl.Text = "http://webservices.amazon.com/AWSECommerceService/AWSECommerceService.wsdl";
handler = new HttpClientHandler();
handler.AllowAutoRedirect=false; httpClient = new HttpClient(handler); // Limit the max buffer size for the response so we don't get overwhelmed
httpClient.MaxResponseContentBufferSize = ;
// Add a user-agent header
httpClient.DefaultRequestHeaders.Add("user-agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident/6.0)");
} private void btnRequest_Click(object sender, EventArgs e)
{
try
{ txtMsg.Text=string.Empty;
txtStatusText.Text = "等待请求返回 ...";
var task = httpClient.GetAsync(txtUrl.Text);
task.Result.EnsureSuccessStatusCode();
HttpResponseMessage response = task.Result; txtStatusCode.Text = response.StatusCode + " " + response.ReasonPhrase + Environment.NewLine;
txtStatusText.Text = "请求返回结果如下 ...";
var result = response.Content.ReadAsStringAsync();
string responseBodyAsText = result.Result;
responseBodyAsText = responseBodyAsText.Replace("<br>", Environment.NewLine); // Insert new lines txtMsg.Text=responseBodyAsText;
}
catch (HttpRequestException hre)
{
txtStatusText.Text = hre.ToString();
}
catch (Exception ex)
{
txtStatusText.Text = ex.ToString();
}
}
}
}
对于System.Net.Http的学习(三)——使用 HttpClient 检索与获取过程数据的更多相关文章
- 对于System.Net.Http的学习(二)——使用 HttpClient 进行连接
对于System.Net.Http的学习(一)——System.Net.Http 简介 使用 HttpClient 进行连接 使用 System.Net.Http 命名空间中的 HttpClient ...
- Java基础学习(三)—面向对象(上)
一.理解面向对象 面向对象是一种思想,是基于面向过程而言的,就是说面向对象是将功能等通过对象来实现,将功能封装进对象之中,让对象去实现具体的细节:这种思想是将数据作为第一位,而方法或者说是 ...
- Android JNI学习(三)——Java与Native相互调用
本系列文章如下: Android JNI(一)——NDK与JNI基础 Android JNI学习(二)——实战JNI之“hello world” Android JNI学习(三)——Java与Nati ...
- (java)selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待
selenium webdriver学习---三种等待时间方法:显式等待,隐式等待,强制等待 本例包括窗口最大化,刷新,切换到指定窗口,后退,前进,获取当前窗口url等操作: import java. ...
- Salesforce LWC学习(三十九) lwc下quick action的recordId的问题和解决方案
本篇参考: https://developer.salesforce.com/docs/component-library/bundle/force:hasRecordId/documentation ...
- Java开发学习(三十六)----SpringBoot三种配置文件解析
一. 配置文件格式 我们现在启动服务器默认的端口号是 8080,访问路径可以书写为 http://localhost:8080/books/1 在线上环境我们还是希望将端口号改为 80,这样在访问的时 ...
- HTTP学习三:HTTPS
HTTP学习三:HTTPS 1 HTTP安全问题 HTTP1.0/1.1在网络中是明文传输的,因此会被黑客进行攻击. 1.1 窃取数据 因为HTTP1.0/1.1是明文的,黑客很容易获得用户的重要数据 ...
- TweenMax动画库学习(三)
目录 TweenMax动画库学习(一) TweenMax动画库学习(二) TweenMax动画库学习(三) ...
- Struts2框架学习(三) 数据处理
Struts2框架学习(三) 数据处理 Struts2框架框架使用OGNL语言和值栈技术实现数据的流转处理. 值栈就相当于一个容器,用来存放数据,而OGNL是一种快速查询数据的语言. 值栈:Value ...
随机推荐
- gc roots 垃圾回收
gc roots包括以下几个: 虚拟机栈(栈桢中的本地变量表)中的引用对象 方法区中的类静态属性引用的对象 方法区中的常量引用的对象 本地方法栈中JNI(即native方法)的引用的对象 java,c ...
- iOS 选择的照片或者拍照的图片上添加日期水印
1..引入框架 #import "CLLocation+GPSDictionary.h"#import "NSDictionary+CLLocation.h" ...
- #知识#室内设计原理ing
室内设计原理 第一章 室内设计的含义和基本观点 人的一生,绝大部分时间是在室内度过的,因此,人们设计创造的室内环境,必然会直接关系到室内生活.生产活动的质量,关系到人们的安全.健康.效率.舒适等等.室 ...
- Android最大可运行内存
int maxMemory = (int) Runtime.getRuntime().maxMemory();
- ubuntu安装octave的小坑
出现了以下情况: After this operation, 163 MB of additional disk space will be used.Do you want to continue? ...
- jquery Ajax获取本地json 以及xml文件
$(function() { $("#Button1").click(function() { //按钮单击事件 //打开文件,并通过回调函数处理获取的数据 $.get(" ...
- C++回调函数的应用<转自:http://blog.csdn.net/wubin1124/article/details/4386269>
一回调函数 我们经常在C++设计时通过使用回调函数可以使有些应用(如定时器事件回调处理.用回调函数记录某操作进度等)变得非常方便和符合逻辑,那么它的内在机制如何呢,怎么定义呢?它和其它函数(比如钩子函 ...
- [OLE DB 源 [1]] 警告: 无法从 OLE DB 访问接口检索列代码页信息。如果该组件支持“DefaultCodePage”属性,将使用来自该属性的代码页。如果当前的字符串代码页值不正确,请更改该属性的值。如果该组件不支持该属性,将使用来自该组件的区域设置 ID 的代码页。
SSIS的警告信息,虽然不影响使用,但是对于一个有强迫症的人来说,实在痛苦, 解决办法:控件右键--属性--AlaywayseUseDefaultCodePage 修改成True即可,默认为False
- Python札记 -- MongoDB模糊查询
最近在使用MongoDB的时候,遇到了使用多个关键词进行模糊查询的场景.竹风使用的是mongoengine库. 查了各种资料,最后总结出比较好用的方法.先上代码,后面进行详细说明.如下: #!/usr ...
- 使用XmlDataDocument将数据存储到XML文档
string str = "Data Source=192.168.1.20;Initial Catalog=WebTest;User ID=sa;Password="; SqlC ...