返回列表 发新帖

c# webclient类用法实例

348.7k 9
swmozowtfl 发表于 2015-7-10 20:45:25|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了c#  webclient类用法实例,本文讲解使用webclient下载文件、openwriter打开一个流使用指定的方法将数据写入到uri以及上传文件示例,需要的朋友可以参考下
8 |$ W2 G- p  i! p0 J' d/ @3 w0 f  进来的项目中要实现能够在windows  service中调用指定项目的链接页面。由于访问页面时候使用的是ie浏览器或其他浏览器,所以想起用webclient类。
' q9 g3 g+ q2 i2 u; v  如果只想从特定的uri请求文件,则使用webclient,它是最简单的.net类,它只用一两条命令执行基本操作,.net  framework目前支持以http:、https和file:标识符开头的uri。
, d; m3 j1 O6 ^  webclient下载文件1 S) R) _5 k# a' i( a3 y
  使用webclient下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式,如果只想把文件保存到磁盘上,使用downloadfile()方法,此方法有两个参数,即请求的uri和请求文件的的数据保存位置。7 @6 Y7 k" F( F7 m4 q" f( `
  更常见的是,应用程序需要处理从web站点检索的数据,为此要用到openread方法,此方法返回一个stream对象,然后,可以stream对象从数据流提取到内存中。
9 `+ A3 N( M4 Q' T! g+ O$ h* J  示例:openread(string uri);, w, T5 G$ z; R  j  c& I& J
  ?
- L5 v" G3 ^, j' @  1
3 a6 n- J: ^) W3 \  2" j& ^  [; G# k" }
  33 s% Y" e. C4 `5 F( m& _0 A
  4
6 Y9 S5 O% C6 U, X' N( A* L/ |1 B: h5 j  5
# a% p+ j- e% y" g  6. \7 u1 b. p2 K  r
  7
& h' Y/ z- V" ?, b; g: q# g9 a  8
, ^9 s# Z+ J! F  q9 Y  D, i- e% V  9
3 d' ?9 `9 k* M4 i& _  10
( O6 Z9 `  i. {  11
9 Y0 {3 g! [/ M& G% e/ g% A  12
* }2 y" ^1 T* T! Q/ ^  13
# k& v/ r- U& \* P1 l6 N  149 }' M  A* K2 c8 ?  y- n
  152 P  |  O+ p2 Z0 `  F& X% b# ]" m
  16
  _( i4 Z& K' o: X1 F6 Y, _  17& U) R% `3 w% I" v) ^# |( X
  18
3 r0 p+ R2 a* y# {, e  t: E  X  190 _" i# _) b2 H1 Q: l2 b+ i
  20. U3 d7 f: [: e3 x6 x
  21openread(string uri)  T$ `; W+ D' I, E+ v1 ^
  #region 读取指定uri的html1 L* w4 E6 c( O$ N! f% C3 n7 k
  ///$ o( j1 a9 L2 V: D

8 P+ L+ `" C* Q" `* n8 O8 M  /// 读取指定uri的html5 d* r. d; d( S2 z- \+ }
  ///( H7 }6 z5 W; J5 [7 Q: u

" m  o5 \: E2 e+ _
# p1 K( O/ |2 ?* ^3 n- E5 D8 E2 v6 B  ///! K; u8 p6 t$ W* r
  ///; O* c. G& X, d& F6 W8 z2 D
  private void button4_click(object sender, eventargs e)1 `! @  [( R5 \, ^
  {
) ~* x1 z9 Q* A; a  webclient wc = new webclient();; S' a" o. V; Z
  string uri = "http://127.0.0.1/rss/sina.aspx";5 h1 s( K* l6 v9 _+ m4 n  i0 P
  stream stream = wc.openread(uri);
# j& m6 v# D3 G# I  streamreader sr = new streamreader(stream);+ I4 Z( p# i: {  b" _+ }
  string strline = "";
/ R5 o, n" o5 @" X  y* D  while ((strline = sr.readline()) != null)
/ ?# D% d& w# h6 j! u; V  {8 g  f, t/ l: G# Q7 U2 ~# M0 x4 u' r
  this.listbox1.items.add(strline);, x3 [" }" y) P& r
  }
7 m# \5 [. }! Y$ {, F; U+ D0 h2 \  sr.close();
  j! p. g* u6 e- p  j; M' q  }
% K; b; B# j# {6 A- a1 ~  R9 B. W  #endregion
& P: r7 a' B$ R  示例:openwriter(string uri,string method);
; d' l# j4 K. g/ h' N* |) g  ?2 l/ q+ @0 S& P) I# Y: P, |
  1
7 z, q% t' Q& v( o: {2 A* u4 M  2
$ s# D$ X, G& e) n& l) |  3
5 q' X( w8 ~- s0 f8 P+ u  4( O& @! l  W  O& G% Z
  56 w" I9 A+ a' m' H! v9 s4 g
  60 G6 `, ~7 i% [  \  t. J' J% {
  7+ E. b& W' Z- q  ]. y- B0 ?  o
  8" h6 p& v1 u- e5 }/ v# V
  9/ C* m  V8 l4 z" i, h
  10
/ X" H5 l' j# M, ^) H. M  11
; W0 J; m4 }' L" [" d  12( D* p' O  z3 p1 j  t8 P+ V1 P
  13
) d. _/ i4 _  p- [% {6 v  14
) r. M; G& M" d; F! Z9 y6 H$ W  15
2 ]" O; b. ^; g0 E" o) K  16
% Q. |( O3 h# H- M- s  17
  L; ?8 a9 D9 |# H% F0 z  18( T0 u7 Q% U+ H" \( D& @
  19openwriter(string uri,string method)
& j# c4 _- r8 D6 O  }" Z* {9 K  #region 打开一个流使用指定的方法将数据写入到uri. i7 c: T' ~8 B! s
  ///9 D4 U& o" `- z# |0 \
. S) t, ^( {1 b* |
  /// 打开一个流使用指定的方法将数据写入到uri
: l3 ]2 K4 L) d! I6 T5 Q  ///  g5 T% G2 H5 a, K# @! s

/ Q/ p! c! r- g% \7 x* M, C  u : |' a# N4 r# m. N0 U3 `% n* x; a% j
  ///
9 K1 w  a3 f1 u0 N' R# r  ///2 B" Q) Q2 E4 \# l9 z3 W" X
  private void button1_click(object sender, eventargs e)' b8 N2 R9 h! G
  {( I* Z  |5 ~) ]1 s. A
  webclient wc = new webclient();: L6 ]0 Y4 ~0 t0 ^1 U+ w; p% Q9 T% N/ k
  string uri = "http://192.168.0.35/cims30/rss.txt";5 p+ }& t. |5 i( M. o$ q$ r* S( W
  stream stream = wc.openwrite(uri, "put");  I9 p' O9 F5 `, d$ k* v) B
  streamwriter sw = new streamwriter(stream);
. }# K, L& A9 v( {3 Q  sw.writeline("helloworldhelloworldhelloworldhelloworld");
: }. ]# V& x3 \# o5 r, m  sw.flush();( _. v" P  w! [0 y2 e
  sw.close();
- M  P4 z/ }5 H0 `7 b2 x! _  messagebox.show("ok");
9 Z! V8 K1 s/ k9 T; j. O  }  N) q* N) V* k9 P8 [7 u2 N
  #endregion2 w4 c. h) t4 P) A8 f/ J
  openwriter方法返回一个可写的数据流,便于用户把数据发送给uri,可以指定用户把数据发送给主机的方法,默认是post,上例假定0.35的服务器上有一个可写的目录刺马s,这段代码是在该目录下创建rss.txt文件,其内容为“helloworldhelloworldhelloworldhelloworld”9 [+ ^" u" V* v, h
  上传文件7 d% _" ?0 L# D, K2 z
  webclient类提供了uploadfile()和uploaddata()方法,在需要投递html窗体或上传整个文件时候,就可以使用这两个方法。uploadfile()方法把文件上传到指定的位置,其中文件名字已经给出,uploaddata()方法把字节数组提供的二进制数据上传到指定的uri;$ v% \$ U9 x$ }
  示例:上传文件
2 @/ ~# E5 E7 J4 e2 n8 g  ?1 A) j' k9 B$ l6 Z& y$ z# S& U: l
 #region 把本地文件上传到指定uri$ E2 q1 _8 O* H! g5 V& y
  ///7 r3 A3 B, x0 r* Z1 z0 j

$ T5 n6 O3 N: ~+ a/ j  /// 把本地文件上传到指定uri$ \) j4 m1 a7 S$ \' L7 S& c" p
  ///# {" s- @2 `0 P! U
# d$ L, h: w. f0 i) r3 s

" r8 Z5 H5 @; H% L% x" _  ///
; C/ b, S: p6 U) h  ///
/ B9 Z5 G: E8 l. p  h  private void button2_click(object sender, eventargs e), R' C3 K! Q: e/ x% Z: u3 O
  {
" C7 H" m" L% f2 p3 |) a  webclient wc = new webclient();, p9 \4 M& R. [: V0 x
  string targetpath = "http://127.0.0.1/rss/data configuration.zip";
# L0 Y* ~) Z" j8 _# e  string sourcepath = "d:\\data configuration.zip";
2 t* H" r' K: A- k8 @! K  this.label1.text = string.format("uploading {0} to {1}", targetpath,  sourcepath);
9 T1 W& f& {( v0 F& ~# k  byte[] bt = wc.uploadfile(targetpath, "put", sourcepath);" [% o4 P! W; ^. O+ D0 a' T
  messagebox.show("ok");/ q% t9 K/ |% }- l& G: }
  }! K+ G& [; z$ i7 f/ A/ b! F
  #endregion
% n; c& N( T5 k1 A/ j# e, Z7 s+ j) k  #region 把数据缓冲区上载到指定资源# B6 I' e. o+ N+ Q
  ///: [) z5 H2 b& q8 r. G

- z/ ^5 G8 z+ G9 p+ p: K5 N4 i  /// 把数据缓冲区上载到指定资源
6 ~& O# J* p; S" V  ///$ a; G1 Q5 y- D, K. L6 M" A. h, r
, I+ u3 z/ F1 V) i% @7 z1 e7 y5 g& W
2 E- B! B+ t3 O
  ///
8 M! [( i% x* S' l) z; u  ///9 x) D) l4 d- g* C, P' A
  private void button3_click(object sender, eventargs e)
( r/ |8 l4 C- Z2 Z) I; c  {
. Q2 J: W8 M' O  webclient wc = new webclient();- w( C% N. R' r
  string targetpath = "http://127.0.0.1/rss/kaifeng.jpg";
: F$ j3 Z  m3 e5 c) g0 C) w) t& H  string sourcepath = @"c:\test.jpg";
; ?+ Y: W$ [8 q* K" V) ]2 S  filestream fs = new filestream(sourcepath, filemode.open,  fileaccess.read);7 y( d* L8 ]/ e5 T8 i
  byte[] bt = new byte[fs.length];
4 z" @. t, ~" k5 I1 w  fs.read(bt, 0, bt.length);
7 q% C) {2 i! a5 ~& ?  wc.uploaddata(targetpath, "put", bt);
: R/ Q4 p* `; d  W$ n  }" ]5 v3 X9 Z, {
  #endregion) d# t/ `/ l4 w- |) e
  webclient功能有限,特别是不能使用身份验证证书,这样,上传数据时候问题出现,现在许多站点都不会接受没有身份验证的上传文件。尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅限于一般意义的检查,对于任何一个协议,webclient没有具体支持,。这是由于webclient是非常一般的类,可以使用任意协议发送请求和接受相应,它不能处理特定于任何协议的任何特性。
1 t' v2 N" ]# f更多技术文章信息请查看: 技术文章

回复|共 9 个

Acropozelan 发表于 2016-3-21 16:44:47|美国 | 查看全部
我在顶贴~!~
tohme 发表于 2016-3-21 16:45:12|中国 | 查看全部
哎 我我我怎么办啊??
gevaemaidovef 发表于 2016-3-21 16:45:14|Reserved | 查看全部
我不是来为楼主呐喊加油的,也不是对楼主进行围堵攻击的。
GoodyFouppy 发表于 2016-3-21 16:45:47|INNA | 查看全部
其实今天baidu 又 抽风了
buingeEvineus 发表于 2016-4-3 15:19:45|美国 | 查看全部
楼主,你要继续努力啊!你是bbs的希望啊!你是网络文学的希望啊!你是整个网络界的希望文学界的希望啊!你是整个人类的希望啊!你是整个太阳系的希望啊!你是整个异次元空间的希望啊!
mwxny 发表于 2016-4-3 15:20:03|辽宁 | 查看全部
怎么就没人拜我为偶像那??
Mqokjdvq 发表于 2016-4-3 15:20:23|日本 | 查看全部
哎 我我我怎么办啊??
alapScady 发表于 2016-4-3 15:20:41|河南 | 查看全部
这就是我斗胆的一点粗略分析,每天睡觉以前,我都会把您的帖子再三拜读,拜读。
wwzcdenleclv 发表于 2016-4-3 15:20:45|INNA | 查看全部
去干吗啊~~~伤心啊~~~

回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

得知互动是一个融创意、设计、开发、营销、生活、互联网于一体的专业交流分享平台。
Copyright © 2026 站长技术交流论坛|互联网技术交流平台|Ai技术交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表