WebClient 用法总结

article/2025/9/12 6:27:32

一、WebClient概述

   WebClient提供向 URI 标识的资源发送数据和从 URI 标识的资源接收数据的公共方法, WebClient 类提供向 URI 标识的任何本地、Intranet 或 Internet 资源发送数据以及从这些资源接收数据的公共方法。
   WebClient 类使用 WebRequest 类提供对资源的访问。WebClient 实例可以通过任何已向 WebRequest.RegisterPrefix 方法注册的 WebRequest 子代访问数据。默认情况下,WebClient 实例不发送可选的 HTTP 报头。
   如果您的请求需要可选报头,必须将该报头添加到 Headers 集合。例如,要在响应中保留查询,必须添加用户代理报头。此外,如果用户代理标头丢失,服务器可能返回 500(内部服务器错误)。
   在 WebClient 实例中,AllowAutoRedirect 设置为 true。
   

   查看MSND上对webclient的解释,有上传与下载方法:

WebClient提供一下上传方法:
   
WebClient提供一下下载方法:

二、WebClient与其他网络相关类的区别

WebClient和HttpWebRequst是用来获取数据的2种方式,一般而言,WebClient更倾向于“按需下载”,事实上掌握它也是相对容易的,而HttpWebRequst则允许你设置请求头或者对内容需要更多的控制,
后者有点类似于form中的submit。虽然两者都是异步请求事件,但是WebClient是基于事件的异步,而HttpWebRequst是基于代理的异步编程。


三、WebClient使用范例

文件下载:

 protected void Button1_Click(object sender, EventArgs e){String url = "http://localhost/SprayerWeb/download/1.zip";WebClient webclient = new WebClient();byte [] bytes = webclient.DownloadData(url);string path = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", DateTime.Now.ToString("yyyyHHmmHHmmssfff"), ".zip");FileStream fs = new FileStream(path, FileMode.Create);fs.Write(bytes, 0, bytes.Length);fs.Close();}protected void Button2_Click(object sender, EventArgs e){WebClient webclient = new WebClient();String url = "http://localhost/SprayerWeb/download/1.zip";Stream stream = webclient.OpenRead(url);string path = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", DateTime.Now.ToString("yyyyHHmmHHmmssfff"), ".zip");FileStream fs = new FileStream(path, FileMode.Create);byte[] bytes = new byte[8192];int read = 0;while ((read = stream.Read(bytes, 0, bytes.Length)) > 0) {fs.Write(bytes, 0, read);//这儿需要使用read,不能使用bytes.Length}fs.Close();}protected void Button3_Click(object sender, EventArgs e){WebClient webclient = new WebClient();String url = "http://localhost/SprayerWeb/download/1.zip";string path = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", DateTime.Now.ToString("yyyyHHmmHHmmssfff"), ".zip");webclient.DownloadFile(url, path);}protected void Button4_Click(object sender, EventArgs e){String url = "http://localhost/SprayerWeb/download/1.zip";Uri uri = new Uri(url, UriKind.Absolute);WebClient webclient = new WebClient();webclient.OpenReadAsync(uri);webclient.OpenReadCompleted+=webclient_OpenReadCompleted;}private void webclient_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e){Stream stream = e.Result;byte[] bytes = new byte[8192];int read = 0;string path = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", DateTime.Now.ToString("yyyyHHmmHHmmssfff"), ".zip");FileStream fs = new FileStream(path, FileMode.Create);while ((read = stream.Read(bytes, 0, bytes.Length)) > 0) {fs.Write(bytes, 0, read);}fs.Close();stream.Close();}

文件上传:

 protected void Button5_Click(object sender, EventArgs e){//在IIS6下没有执行成功,以后再调试吧WebClient webclient = new WebClient();string targetpath = string.Format("{0}{1}{2}","http://localhost/WebApp/upload/",DateTime.Now.ToString("yyyyMMddHHmmssfff"),".zip");string sourcepath = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", "1", ".zip");byte[] responseArray = webclient.UploadFile(targetpath, "PUT", sourcepath);}protected void Button6_Click(object sender, EventArgs e){//在IIS6下没有执行成功,以后再调试吧string targetpath = string.Format("{0}{1}{2}", "http://localhost/WebApp/upload/", DateTime.Now.ToString("yyyyMMddHHmmssfff"), ".zip");string sourcepath = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", "1", ".zip");WebClient webclient = new WebClient();FileStream fs = new FileStream(sourcepath, FileMode.Open, FileAccess.Read);byte[] bt = new byte[fs.Length];fs.Read(bt, 0, bt.Length);byte[] responseArray = webclient.UploadData(targetpath, "PUT", bt);fs.Close();}protected void Button7_Click(object sender, EventArgs e){WebClient webclient = new WebClient();string sourcepath = string.Format("{0}\\{1}\\{2}{3}", Server.MapPath("~"), "download", "1", ".zip");byte[] responseArray= webclient.UploadFile("http://localhost/WebApp/upload.aspx", "POST", sourcepath);Response.Write("result:"+System.Text.Encoding.UTF8.GetString(responseArray));}

upload.aspx文件代码如下:

 protected void Page_Load(object sender, EventArgs e){//string uploadpath = string.Format("{0}\\{1}{}");foreach (string f in Request.Files.AllKeys){HttpPostedFile postfile = Request.Files[f];string path = String.Format("{0}\\{1}\\{2}{3}",Server.MapPath("~"),"upload",DateTime.Now.Ticks.ToString(),".zip");postfile.SaveAs(path);}Response.Write("Success");}



更多详细内容参考:https://msdn.microsoft.com/zh-cn/library/system.net.webclient%28VS.80%29.aspx




http://chatgpt.dhexx.cn/article/JLArObxM.shtml

相关文章

C#-WebClient

using ( var wc new System.Net.WebClient() ) {var imagebytes wc.DownloadData( hag.ImagePath );using ( MemoryStream ms new MemoryStream( imagebytes ) ) {picImage.Image Image.FromStream( ms );} } C#中HttpWebRequest、WebClient、HttpClient的使用 HttpWebRe…

webclient学习1.webclient是什么?

1.webclient是什么? WebClient 软件包是 RT-Thread 自主研发的,基于 HTTP 协议的客户端的实现,它提供设备与 HTTP Server 的通讯的基本功能。 2.软件包功能特点 WebClient 软件包功能特点: 支持 IPV4/IPV6 地址 WebClient 软…

SpringBoot - 网络请求客户端WebClient使用详解

在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 RestTemplate 是 Spring 3 中引入的同步阻塞式 HTTP 客户端,因此存在一定性能瓶颈。根据 Spring 官方文档…

【QString 函数学习篇】

【QString 函数学习篇】 【1】UI设计布局【2】QChar | setAlignment |【3】sprintf | asprintf | setNum | number |【4】toInt | toUpper [十进制->十六进制 | 十进制->二进制]【5】clear | append【6】二进制->十六进制 | 二进制->十进制【7】prepend【8】strimm…

Qt扫盲-QString使用总结

QString使用总结 一、概述二、初始化字符串1、极速版2、原理版 三、操作字符串1、极速版1. 增加2. 删除3. 修改4. 插入5. 转换 2、原理版 四、查询字符串五、字符串格式转换六、Null 字符串和 Empty 字符串的区别七、字符串参数格式化八、更高效的字符串构造九、最大大小和出现…

Qt之QString字符串类的详细介绍及功能函数示例用法

前序:为了加深对Qt各个类的认识和了解,决定以后再闲暇的时间对Qt类进行详细的阅读(基于Qt cteater 的帮助文档),这样既可以提高自己的英文阅读能力,也可以对各个类有一个更加深入的认识和了解。 注&#xf…

QString类详解

文章目录 一、简要介绍1.1 隐式共享 二、常用方法2.1 常用构造函数2.2 字符串与数值之间的转换2.3 添加字符串2.4 大小写转换2.5 长度2.6 其他常用函数 一、简要介绍 在Qt中表示字符串的类是QString类,它存储字符串是采用的Unicode码,编码方式是使用UTF…

QString(详解)

目录 一、QString转char* 二、合并字符串 三、分割字符串 split()函数 mid(pos,n)函数 QString::section truncate(int)函数,从指定位置截断字符串str 四、去除字符串两端的空白 QString::trimmed()函数 QString::simplified()函数 五、查找是否包含字符…

Java——JLabel自动换行问题

┏(ω)☞ 本专栏的目录(为您提供更好的查询方式)(点这里说不定有你想要的) JLabel类可显示文本,一般直接添加文字会导致如下问题(字体显示不全),在不同过增加文本框的长度的情况下可…

JLabel展示文本和图片

JLabel 构造方法 JLabel()创建一个不含图像,不含文本的 JLabel 对象 JLabel(String text)使用指定的文本创建一个 JLabel 对象 JLabel(Icon image)创建一个具有指定图像的 JLabel 对象 pack…

java设置JLabel字体字号颜色

JLabel jl; Font f new Font("宋体",Font.PLAIN,16); jl.setFont(f); jl.setForeground(Color.red); 效果图:

JLabel设置背景颜色和设置文字颜色

JLabel设置背景颜色: JLabel light1 new JLabel("wuli"); light1.setOpaque(true); //此句是重点,设置背景颜色必须先将它设置为不透明的,因为默认是透明的。。。 light1.setBackground(Color.GREEN); JLabel设置文字颜色&…

【Java|Swing】关于JLabel换行

最近在用Swing做Windows的窗口程序,在使用JLabel时发现使用\n没办法换行,于是乎借助百度一下弄懂了JLabel是如何实现换行的。 先可以看一下使用\n的效果 JLabel labelnew JLabel("数据版本\nv1.0.0"); 运行测试 很明显,换行失败了…

初识JFrame、JPanel、JLabel

JFrame:java图形化界面设计,是一个顶层的框架类,相当于容器。好比一个窗户的框子,这个框子可以嵌入几个玻璃窗。 JPanel:也是一个容器类,相当于一个大玻璃窗。 JLabel:是一些基础组件&#xff0…

JFrame,JPanel,JLabel详解

JFrame是一个顶层的框架类,好比一个窗户的框子。也是一个容器类。这个框子可以嵌入几个玻璃窗。 JPanel是一个容器类,相当于一大玻璃窗。 JLabel等是一些基础组件,它必须置于某个容器里,类似于窗花、剪纸,必须置于窗户…

Java图形界面之JFrame,JLabel,JButton

Java图形界面之JFrame,JLabel,JButton 前言 ​ Java第一卷​ 图形界面第一节 JFrame package Demo03;import javax.swing.*; import java.awt.*;public class JFrame01 {public static void main(String[] args) {JFrame f new JFrame("第一个Swi…

Java GUI编程4---标签组件JLabel

1. 认识JLabel JLabel组件表示的是一个标签,本身是用于显示信息的,一般情况下是不能直接更改器显示内容的。创建完的Label对象可以通过Container类中的add()方法,加入到容器中,JLabel类的常用方法和常量如下表所示。 序号常量描…

JLabel标签较为常见部分的使用方法

本篇文章将会教会大家如何使用JLabel 1添加JLabel //创建一个标签 JLabel jLabel new JLabel("Hi,我是标签"); //添加到面板 Jpanel1.add(jLabel); //将面板添加到窗口 jFrame.add(Jpanel1);2设置文本颜色 //设置文本颜色 jLabel.setForeground(Color.green);3设…

Java基础-JLable组件、文本框组件、JPanel轻量级容器、Swing事件处理三种方式、适配器

1、JLable标签组件 标签是一种可以包含文本和图片的非交互组件,其文本可以是单行文本,也可以是 HTML 文本。对于只包含文本的标签可以使用 JLabel 类,该类的主要构造方法有如下几种形式。 JLabel():创建无图像并且标题为空字符串…

06.JavaSwing(基础组件——JLabel类)

软件界面是软件和用户之间的交流平台,而组件则是绘制软件界面的基本元素,是软件和用户之间的交流要素。 一、概述 JLabel组件用来显示文本和图像,可以只显示其一种,也可以同时显示。JLabel类提供了一些列用来设置标签的方法。 二…