返回列表 发新帖

c# webclient类用法实例

348.7k 9
swmozowtfl 发表于 2015-7-10 20:45:25|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了c#  webclient类用法实例,本文讲解使用webclient下载文件、openwriter打开一个流使用指定的方法将数据写入到uri以及上传文件示例,需要的朋友可以参考下
( v& q0 t# v# ~7 x& o  进来的项目中要实现能够在windows  service中调用指定项目的链接页面。由于访问页面时候使用的是ie浏览器或其他浏览器,所以想起用webclient类。
" j" H5 m$ ?- Y2 J" I$ R  如果只想从特定的uri请求文件,则使用webclient,它是最简单的.net类,它只用一两条命令执行基本操作,.net  framework目前支持以http:、https和file:标识符开头的uri。
7 H' m2 I1 o2 S" A. D; J0 H# H/ Y4 M  webclient下载文件, Y, l* j, b& o% I& [9 z
  使用webclient下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式,如果只想把文件保存到磁盘上,使用downloadfile()方法,此方法有两个参数,即请求的uri和请求文件的的数据保存位置。7 a( Y; h( j, l- |8 m/ ]
  更常见的是,应用程序需要处理从web站点检索的数据,为此要用到openread方法,此方法返回一个stream对象,然后,可以stream对象从数据流提取到内存中。9 ?- K6 o- _+ L/ x0 U0 K3 z$ |
  示例:openread(string uri);% `5 r: [2 _+ K
  ?
7 O' W3 O: C# j8 j3 l  1
# F( u0 w3 j4 R) [  2
: }/ j8 \2 s$ ?/ O, K# w  3
$ e7 ?1 U; Y' j. m* L5 o( ~  48 }" {% U: q5 W" V0 r! V* o2 R
  5
# T( j" E& p# C; I0 g& `  67 d) h& k$ J& c% U4 I2 W3 Z
  7
9 T4 D- i2 }4 P( A8 Y/ r8 d/ ^# T% w0 s  8* ]5 V- F8 L: X, V1 x7 i" V
  9
' ~/ _7 W4 |) j' M! S. M! q  10! I0 q1 R) A5 }9 n! x+ z
  11
0 W5 e: \% b* F  12. W! k+ D" W6 J+ [9 m' m, ~! P
  13: @, H& s' p( O5 n
  14$ _: W% c& Z- r9 Y* |- k
  15
9 q& K. l# U& i7 I; \! b  16; L% E" i0 o4 @7 Z1 A
  17
- g7 x+ m2 D1 V, P8 O. R  183 R, c3 ]8 }8 _% O- C
  19
; u/ \2 ^2 v% E+ ?: \% e% K  20& a* e9 Y) O) i% c& G; K" N+ X( y
  21openread(string uri)
" J0 d5 S* j. A% O; ]  #region 读取指定uri的html
# V/ K7 X' B, u/ w5 q! k- f  ///
6 C8 V. @* W( D( T( ~ $ ]9 ?& [; R' T: X6 S" t
  /// 读取指定uri的html/ Z* R( W$ w; b3 X
  ///
  @! ^$ g. M! S( j
* {6 ^( X7 f4 ~  v, C6 G% K
* y; i9 k7 O( k  ///8 C% S6 }+ {3 F0 p* z6 Y1 v
  ///
. R  n) n& a  C0 x6 q8 r7 j  private void button4_click(object sender, eventargs e)
$ L, F" x, n6 N6 c& t  {
; e% a( _+ @3 c( w4 Z  webclient wc = new webclient();7 d" V2 i) v* B+ ~" o# X4 `
  string uri = "http://127.0.0.1/rss/sina.aspx";9 Y/ `1 g; o$ R  {2 v6 Q% r9 v; ~
  stream stream = wc.openread(uri);' W, Z$ P. ~* m( X/ A/ |, l
  streamreader sr = new streamreader(stream);6 y; Q' q) y9 }
  string strline = "";; Z' E* c5 C# |2 q" j9 c
  while ((strline = sr.readline()) != null)
! E# v- {) l& `5 i  {7 [4 R+ H$ n3 ]* c3 b  D/ k
  this.listbox1.items.add(strline);" J9 Z# d: R, ~; I
  }
! Q2 M6 o! a% D# e% w  sr.close();
% q" A7 H) Q/ Q) A. T, n  }3 }2 P( D5 j8 G: S
  #endregion
1 L8 e$ r+ y2 e  示例:openwriter(string uri,string method);% K, ~/ D9 {$ D5 Q" @- d! ?8 M
  ?5 [5 c4 E- M# j
  1$ Y* |( a6 q: p0 l
  2$ I- e- ~- r, X( w; W0 Y% N& P: Y; e
  3
+ Q8 u" Q; c& P% \  4' ~' ?$ t! C6 e( V
  5
/ }* d+ o" d' H: m1 z  6: @: x% n( X6 j$ Q0 d/ d
  7) p: D! n1 ~8 ]) y3 z) k
  82 Q/ V# {: w( d% I6 f, L
  9% o/ g5 @, Z* C9 N) @
  10( j, K: F6 t5 C; C) R/ @
  112 ^4 U; S1 a7 ^* U. [6 F) X
  12% n9 ]& `: _+ w/ O, P
  13
: m4 [/ S1 _! q# J; @- w  14
% O% @& }/ m  E* u0 X. K- \  15
+ P# [0 J5 n( T8 x1 k  16
, w/ [7 v- {# N9 l) }* N; r; O  17" Z+ U( X! @0 |; S! B, h
  186 L) D' |$ ~& T! M; m) Q
  19openwriter(string uri,string method)" e$ I' J8 @9 V- v4 i" c% d
  #region 打开一个流使用指定的方法将数据写入到uri
7 B2 ]2 j, P' |  }  ///' ~" X5 R. m0 q0 x7 e

* _) G# \, o2 t) _  /// 打开一个流使用指定的方法将数据写入到uri
! P8 A3 Q: G; }! D7 r  ///
6 u; L. J) \& ^6 j; k, b7 N2 ?' `+ s- R6 w
! r8 T, G, ^( f. j
  ///0 w% F) m  Q, |! j( y2 v$ c* r
  ///. t* N  ^- L! E  s$ k
  private void button1_click(object sender, eventargs e)
4 }  z% {9 V9 E2 G  h. p  {0 V$ S4 y" O9 ?( O: C3 W' o
  webclient wc = new webclient();- R/ m: l' v3 n4 q; q- ^7 a
  string uri = "http://192.168.0.35/cims30/rss.txt";2 ]7 v3 D5 ^. d& _! F
  stream stream = wc.openwrite(uri, "put");
4 n; Y9 x' N- l- \, l# Y" a' Q  streamwriter sw = new streamwriter(stream);
" q) B$ h" j5 F' `4 ^; s  sw.writeline("helloworldhelloworldhelloworldhelloworld");, p/ {" G* W2 z4 \2 D
  sw.flush();
: v; T& p; q' X! C& I+ c  sw.close();
7 d) m8 `& m7 z/ Z+ o; M  messagebox.show("ok");
# Q5 _4 Q$ k( y/ k+ v  }
, s! A6 G' p7 {% o0 b  #endregion
. B3 t: V0 y, P$ t  openwriter方法返回一个可写的数据流,便于用户把数据发送给uri,可以指定用户把数据发送给主机的方法,默认是post,上例假定0.35的服务器上有一个可写的目录刺马s,这段代码是在该目录下创建rss.txt文件,其内容为“helloworldhelloworldhelloworldhelloworld”
2 J+ t% _9 U8 ?  上传文件
9 E5 q) z0 A  ?7 s  webclient类提供了uploadfile()和uploaddata()方法,在需要投递html窗体或上传整个文件时候,就可以使用这两个方法。uploadfile()方法把文件上传到指定的位置,其中文件名字已经给出,uploaddata()方法把字节数组提供的二进制数据上传到指定的uri;
4 X8 G0 U/ e" V# B. ^) I+ f9 p: E  示例:上传文件( ^4 h1 f# l/ y
  ?6 H" ?- L' W: ~  }/ {
 #region 把本地文件上传到指定uri
* s3 N- g4 r! v2 ]4 J6 |  ///
+ G' n7 w2 ~$ D  f
2 b4 N* [$ F+ f! P' g  /// 把本地文件上传到指定uri
; P* E+ h' |! n9 a' F! c4 Q" h  ///8 {* W2 ?  h! [. i9 r) S

* t) q  z9 a4 r+ a% x/ _7 U
  T+ n" r* \6 b: X* @. t% _: \) W6 w  ///) v# y1 P9 k& k$ |- q* e
  ///
4 y7 ~7 a  \- k9 _% Z  private void button2_click(object sender, eventargs e)3 z& s" n* j: t1 A/ d
  {
% {) f* D2 k; U/ d  O' P  webclient wc = new webclient();
8 Y) h# S# }0 t2 a; O7 F. r  string targetpath = "http://127.0.0.1/rss/data configuration.zip";" E" R4 ^6 f; J
  string sourcepath = "d:\\data configuration.zip";
0 ~3 K# E! w0 W( P. P  g, M, _  this.label1.text = string.format("uploading {0} to {1}", targetpath,  sourcepath);7 f8 X1 w  p' T5 z: G2 U% {9 r
  byte[] bt = wc.uploadfile(targetpath, "put", sourcepath);" A# I( T1 q, z: l; j0 K0 q/ G( }
  messagebox.show("ok");
# Z) d# t' J) d7 \' p- m; c  }
" t4 P( h1 O( t2 Q  #endregion
4 ^9 G: U# h9 l( w! z' D1 {  #region 把数据缓冲区上载到指定资源. H; Y, m$ [9 ^1 x7 Z
  ///+ o. H- E$ _8 m( q  k1 \

/ y. P" m8 p; z) S7 T1 z  /// 把数据缓冲区上载到指定资源
; D1 ]3 Y4 T# m, F: E+ y* X  ///
% k( J) g1 P& _% A9 R& c  D
: z1 }% Q6 F$ p; I3 L- Z6 ]; }
( w% o% h* s; N) K+ |; r  ///
- r( W  R& l9 w2 e$ J! N3 J$ }5 s  ///1 @3 n7 g( E- q/ |$ u
  private void button3_click(object sender, eventargs e)/ w/ X4 S7 Z6 Q* m" P( q
  {% ]% e5 `' z0 o6 i3 q1 B2 h' T+ r1 ]
  webclient wc = new webclient();
, f! L. n6 Q4 o4 @5 W. B  string targetpath = "http://127.0.0.1/rss/kaifeng.jpg";
  J3 m/ ^. K( N& H* X  string sourcepath = @"c:\test.jpg";
" l2 y# m1 Q5 q4 z# a, }  filestream fs = new filestream(sourcepath, filemode.open,  fileaccess.read);. _& I0 |% R7 `6 E. U/ \
  byte[] bt = new byte[fs.length];
% L/ f$ k$ G( n  fs.read(bt, 0, bt.length);
* D$ o8 }# M% w. K5 D2 U" g' Z  wc.uploaddata(targetpath, "put", bt);
& ?4 l9 O3 g) ?" p1 [0 b  }, O) g$ N& S+ y3 r$ X& f2 S
  #endregion
; O5 q. A8 I9 }& [) ~1 @8 M! I  webclient功能有限,特别是不能使用身份验证证书,这样,上传数据时候问题出现,现在许多站点都不会接受没有身份验证的上传文件。尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅限于一般意义的检查,对于任何一个协议,webclient没有具体支持,。这是由于webclient是非常一般的类,可以使用任意协议发送请求和接受相应,它不能处理特定于任何协议的任何特性。- G/ g! }+ A" T/ a8 S% c: F- T/ 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与站长技术交流社区-Ai交流平台 版权所有 All Rights Reserved. Powered by Discuz! X5.0 鄂ICP备15006301号-5|鄂公网安备 42018502006730号
关灯 在本版发帖 扫一扫添加QQ客服 返回顶部
快速回复 返回顶部 返回列表