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资源的访问.无外乎客户端发送请求,服务端处 ...
随机推荐
- 20155235 《Java程序设计》 实验四 Android开发基础
20155235 <Java程序设计> 实验四 Android开发基础 实验要求 基于Android Studio开发简单的Android应用并部署测试; 了解Android组件.布局管理 ...
- 20155336 2016-2017-2 《Java程序设计》第四周学习总结
20155336 2016-2017-2 <Java程序设计>第四周学习总结 教材学习内容总结 第六章 继承:面向对象中,为避免多个类间重复定义共同行为.(简单说就是将相同的程序代码提升为 ...
- 20145226 《Java程序设计》第4周学习总结
教材学习内容总结 学习目标 理解封装.继承.多态的关系 理解抽象类与接口的区别 掌握S.O.L.I.D原则 了解模式和设计模式 能正确覆盖方法 了解垃圾回收机制 掌握Object类 掌握enum 教材 ...
- php 换行 PHP_EOL
在unix世界换行就用/n来代替,但是windows为了体现他的不同,就用/r/n,更有意思的是在mac中用/r.因此unix系列用 /n,windows系列用 /r/n,mac用 /r,这样就用你写 ...
- python 发红包的小程序
红包1 import random def redpacket(cash,person): lst=[] sum1=0 cash = cash * 100 while cash>0 and pe ...
- 【LG3206】[HNOI2010]城市建设
[LG3206][HNOI2010]城市建设 题面 洛谷 题解 有一种又好想.码得又舒服的做法叫线段树分治+\(LCT\) 但是因为常数过大,无法跑过此题. 所以这里主要介绍另外一种玄学\(cdq\) ...
- TCP三次握手和四次挥手以及11种状态
1.三次握手 置位概念:根据TCP的包头字段,存在3个重要的标识ACK.SYN.FIN ACK:表示验证字段 SYN:位数置1,表示建立TCP连接 FIN:位数置1,表示断开TCP连接 三次握手过程说 ...
- codevs2215 三角形蛋糕
codevs2215 三角形蛋糕 原题链接 煞笔题??? 开始一看似乎没啥思路的样子 然后想了一下 额... 首先啃腚考虑缩进存储 然后看一下这样的性质 #-##----# -----#- ---#- ...
- 「日常训练」The Necklace(UVA-10054)
代码 for(int i=0; i!=n; ++i) { int u = cin.nextInt(); int v = cin.nextInt(); edges.add(new Edge(u,v)); ...
- C++自学第二课:对象和类的概念
既然是C++,比C语言多了最重要的概念:面向对象. 面向对象?对象是什么?Girlfriend? 我天天面向她也没学会C++. 我觉得对象就是有统一特征的一类编程目标. 打个比方说墙上有个开关,我一按 ...