WebClient的使用
1、下载网页源码:
private void button1_Click(object sender, EventArgs e)
{
string url = textBox1.Text;
string toUrl = Application.StartupPath + "\\" + Path.GetFileName(url); WebClient wc = new WebClient();
wc.DownloadDataAsync(new Uri(url));
wc.DownloadDataCompleted += wc_DownloadDataCompleted;
} void wc_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e)
{
if (e.Error == null && e.Cancelled == false)
textBox2.Text = Encoding.UTF8.GetString(e.Result);
else
MessageBox.Show(e.Error.Message);
}
2、直接下载文件,比较简单,但下载比较伤硬盘:
private void button1_Click(object sender, EventArgs e)
{
string url = textBox1.Text;
string toUrl = Application.StartupPath + "\\" + Path.GetFileName(url); WebClient wc = new WebClient();
wc.DownloadFileCompleted += wc_DownloadFileCompleted;
wc.DownloadFileAsync(new Uri(url), toUrl);
} void wc_DownloadFileCompleted(object sender, AsyncCompletedEventArgs e)
{
MessageBox.Show("下载完成");
}
3、利用缓存下载文件,可以更好的保护硬盘
private void button2_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
wc.OpenReadAsync(new Uri(textBox1.Text));
wc.OpenReadCompleted += wc_OpenReadCompleted;
}
async void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e)
{
if (e.Error == null)
{
await SaveFile(e.Result, Application.StartupPath + "\\" + Path.GetFileName(textBox1.Text));
MessageBox.Show("下载完成");
}
else
{
MessageBox.Show(e.Error.Message);
}
}
Task SaveFile(Stream stream, string savepath)
{
return Task.Run(() =>
{
var read = stream;
byte[] buf = new byte[];
int res = ;
FileStream fs = File.Open(savepath, FileMode.OpenOrCreate);
using (fs)
{
while ((res = read.Read(buf, , buf.Length)) > )
{
fs.Write(buf, , res);
fs.Flush();
}
}
read.Close();
read.Dispose();
});
}
4、上传文件
web网站创建一般处理程序 FileHandler:
public class FileHandler : IHttpHandler
{
public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain";
try
{
HttpFileCollection files = context.Request.Files;
if (files.Count > )
{
files[].SaveAs(HttpContext.Current.Server.MapPath("files/" + context.Request.QueryString["fname"]));
context.Response.Write("save success!");
}
else
context.Response.Write("hello request!");
}
catch (Exception ex)
{
context.Response.Write("save error!" + ex.Message);
}
} public bool IsReusable
{
get
{
return false;
}
}
}
由于网站对上传文件大小有限制,修改上传大小可以在ASP.Net在web.config中设置:
<system.web>
<httpRuntime maxRequestLength="" //即40MB,1KB=1024
useFullyQualifiedRedirectUrl="true"
executionTimeout=""
minFreeThreads=""
minLocalRequestFreeThreads=""
appRequestQueueLimit=""
enableVersionHeader="true"
/>
</system.web>
对于webclient,在winform窗体上点击按钮,则把文件上传到上面的服务器网站目录中。
private void button1_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{ string path = openFileDialog1.FileName;
WebClient wc = new WebClient();
wc.Credentials = CredentialCache.DefaultCredentials;
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.QueryString["fname"] = openFileDialog1.SafeFileName;
byte[] fileb = wc.UploadFile(new Uri(@"http://localhost:15993/FileHandler.ashx"), "POST", path);
string res = Encoding.UTF8.GetString(fileb);
MessageBox.Show(res);
}
}
5、向服务器发送文字
服务器Test.ashx:
public class Test : IHttpHandler
{ public void ProcessRequest(HttpContext context)
{
context.Response.ContentType = "text/plain"; int len=context.Request.ContentLength;
var buf=context.Request.BinaryRead(len);
var res=Encoding.UTF8.GetString(buf); context.Response.Write("Result="+res);
} public bool IsReusable
{
get
{
return false;
}
}
}
客户机:
private void button2_Click(object sender, EventArgs e)
{
WebClient wc = new WebClient();
var data = textBox2.Text; wc.UploadStringAsync(new Uri("http://localhost:15993/Test.ashx"), "POST", data);
wc.UploadStringCompleted += wc_UploadStringCompleted;
} void wc_UploadStringCompleted(object sender, UploadStringCompletedEventArgs e)
{
MessageBox.Show(e.Result);
}
6、上传表单
服务器端用.net Controller:
public ActionResult add(int a,int b)
{
int c = a + b;
return Content(c.ToString()); ;
}
客户机:
private void button3_Click(object sender, EventArgs e)
{
var data = "a=1&b=2";
var postData = Encoding.UTF8.GetBytes(data); WebClient wc = new WebClient();
wc.Headers.Add("Content-Type", "application/x-www-form-urlencoded");
wc.UploadDataAsync(new Uri("http://localhost:15993/home/add"), "POST", postData);
wc.UploadDataCompleted += wc_UploadDataCompleted;
} void wc_UploadDataCompleted(object sender, UploadDataCompletedEventArgs e)
{
MessageBox.Show(Encoding.UTF8.GetString( e.Result,,e.Result.Length));
}
WebClient的使用的更多相关文章
- 跨域请求——WebClient通过get和post请求api
AJAX不可以实现跨域请求,经过特殊处理才行.一般后台可以通过WebClient实现跨域请求~ //get 请求 string url = string.Format("htt ...
- C#通过WebClient/HttpWebRequest实现http的post/get方法
C#通过WebClient/HttpWebRequest实现http的post/get方法 http://www.cnblogs.com/shadowtale/p/3372735.html
- WebClient 实现多文件/文本同时上传
public class CreateBytes { Encoding encoding = Encoding.UTF8; /**/ /// <summary> /// 拼接所有的二进制数 ...
- WebClient 数据传输
数据提交 post ,get public string WebClientPost(string PostData, string PostUrl, string Type) { string p ...
- C# 文件下载 : WebClient
最近更新了一个下载小工具,主要提升了下面几点: 1. 在一些分公司的局域网中,连接不上外网 2. 服务器上的文件更新后,下载到的还是更新前的文件 3. 没有下载进度提示 4. 不能终止下载 下面和大家 ...
- C# 发送Http请求 - WebClient类
WebClient位于System.Net命名空间下,通过这个类可以方便的创建Http请求并获取返回内容. 一.用法1 - DownloadData string uri = "http:/ ...
- c# WebClient Get Post 方法
public string GetData(string url) { string data; using (var client = new WebClient()) { using (var s ...
- c# WebClient文件下载
public void HttpDownload(string url, string path, ResourceType type) { using (var client = new WebCl ...
- [解决WebClient或HttpWebRequest首次连接缓慢问题]
[编程环境]Visual Studio 2010, NET4.0 [开发语言]C#, 理论上VB.NET等依赖.NET Framework框架的语言均受此影响 [问题描述] 使用HttpWebRequ ...
- winform客户端利用webClient实现与Web服务端的数据传输
由于项目需要,最近研究了下WebClient的数据传输.关于WebClient介绍网上有很多详细介绍,大概就是利用WebClient可以实现对Internet资源的访问.无外乎客户端发送请求,服务端处 ...
随机推荐
- 使用mac学习java的一些基本操作
使用mac学习java的一些基本操作 本文主要讲一下MacOS与windows的不同 iTerm2 使用mac的同学是不需要安装虚拟机来学习linux命令的.只需要使用iTerm2[下载地址]+zsh ...
- 20155305 2016-2017-2 《Java程序设计》实验一 Java开发环境的熟悉(macOS + IDEA)
20155305 2016-2017-2 <Java程序设计>实验一 Java开发环境的熟悉(macOS + IDEA) 实验内容 1.使用JDK编译.运行简单的Java程序: 2.使用E ...
- 【转】odoo学习之:开发字段解析
odoo新API中,字段类型不变,继承改变 1.旧的API定义模型: from openerp.osv import osv,fields class oldmodel(osv.osv): #模型名称 ...
- Linux系统处理木马病毒的思路
一.清除木马程序步骤 1.1 执行命令,每1秒刷新一次,显示整个命令路径,而不是命令的名称. [root@linux-node1 ~]# top -d -c 1.2 查找可疑进程(比较奇怪的进程名称) ...
- 【python笔记】python中的list、tuple、set、dict用法简析
list list是一种有序的集合(或称作列表),可以很方便地添加和删除其中的元素. >>> classmates = ['Michael', 'Bob', 'Tracy'] 可通过 ...
- 【JUC源码解析】PriorityBlockingQueue
简介 基于数据结构堆实现的线程安全的无界队列,这个堆的内存结构是数组,结合了数组和二叉树的特点. 堆 以下内容参考<编程珠玑>和<算法导论>有关堆的章节. 数据结构 堆是用来表 ...
- ----------BMI指数小程序----------
# 1.创建并输出菜单, 菜单是不可变的. 所以使用元组# menus = ("1, 录入", "2, 查询", "3, 删除", &quo ...
- JY播放器【网易云音乐破解下载】
今天给大家带来一款神器----JY播放器.可以直接下载网易云音乐的歌曲. 目前已经支持平台(蜻蜓FM.喜马拉雅FM.网易云音乐.QQ音乐) 使用方法: 在电脑打开网易云音乐或者网站找到你要听的歌曲或歌 ...
- Saving James Bond - Easy Version (MOOC)
06-图2 Saving James Bond - Easy Version (25 分) This time let us consider the situation in the movie & ...
- leetcode12_C++整数转罗马数字
小弟不才,有错误或者更好解,求留言. 罗马数字包含以下七种字符: I, V, X, L,C,D 和 M. 字符 数值 I 1 V 5 X 10 L 50 C 100 D 500 M 1000 例如, ...