返回列表 发新帖

c# webclient类用法实例

348.9k 9
swmozowtfl 发表于 2015-7-10 20:45:25|湖北 | 查看全部 阅读模式
  这篇文章主要介绍了c#  webclient类用法实例,本文讲解使用webclient下载文件、openwriter打开一个流使用指定的方法将数据写入到uri以及上传文件示例,需要的朋友可以参考下
, E$ w& j, m, U& f/ d3 u6 X( Q  进来的项目中要实现能够在windows  service中调用指定项目的链接页面。由于访问页面时候使用的是ie浏览器或其他浏览器,所以想起用webclient类。  ]% v, ~" T1 D/ r. I! _* d! r& y
  如果只想从特定的uri请求文件,则使用webclient,它是最简单的.net类,它只用一两条命令执行基本操作,.net  framework目前支持以http:、https和file:标识符开头的uri。
; i* C! o4 b1 s7 g  webclient下载文件9 }9 W6 }8 w  ?1 I
  使用webclient下载文件有两种方法,具体使用哪一种方法取决于文件内容的处理方式,如果只想把文件保存到磁盘上,使用downloadfile()方法,此方法有两个参数,即请求的uri和请求文件的的数据保存位置。. t+ I2 z% |# |* y
  更常见的是,应用程序需要处理从web站点检索的数据,为此要用到openread方法,此方法返回一个stream对象,然后,可以stream对象从数据流提取到内存中。
9 Y% N6 H6 }) m6 `3 i. M+ P  示例:openread(string uri);
- Z5 J$ x0 N3 L- \! i$ z7 B6 X  ?
( [. f' H: k9 L. c1 [5 d# b  11 B  n( k& h6 T/ K% @# T
  2
0 m" E" S5 o$ {3 z& M  3
# h3 T0 V) c$ L/ a* f/ ]8 x+ f6 M  4
) w% B4 B" I3 ?0 n8 P  5
/ t6 Y7 ~- R9 y4 r, k- w; T% M  6
% `* L/ {. Y: ~8 s- Y, n- W  7
+ |% h' [" H; |3 m- E9 v  86 K( Q4 v$ H+ }: g/ W  A( p4 X8 w
  9
% q# l9 z- z: R8 j2 h5 k; y  10+ K7 [( ?; o0 p/ B9 \
  11* h& U$ B2 W9 u  u
  12$ I- z& ~/ m$ A; J- u
  13
8 i- W, g' M, L' u  Q2 m  143 v! j$ z- X4 p
  15
; Z" [0 y; U5 o1 m, @" {& D9 {! n  16, I' K/ f0 C* e* Q9 ?
  173 [6 U8 R0 i0 G; c- {
  188 ]. N* X" s& V! G. V7 {- N
  190 U0 H/ a2 @0 q' {' n
  20! ?# C) ?" f$ ?9 J# ?
  21openread(string uri)
/ v/ P* V* f. s/ `4 `; O  #region 读取指定uri的html2 z5 W" S0 C2 i6 H9 m3 j- Y
  ///
  Y2 V; O8 P/ T3 \# Y0 G
( p/ M: C7 d7 \8 h  /// 读取指定uri的html
9 M# w  q- Z( \6 J$ _. y  ///
+ n7 j0 X7 T/ k  Y$ w. G; L7 w& @
, _8 i  U! |8 {2 f 7 R/ W. ?+ G( _& U$ R6 x6 s
  ///
) A' j. Q# p) y  Y# T7 T0 M  ///& z9 h. z9 F( U" ?1 d3 m, A8 p5 N* Y
  private void button4_click(object sender, eventargs e)
' V0 ~, X, e- _5 m# G6 \8 w  {% r/ m4 q5 k6 S
  webclient wc = new webclient();5 e- \5 E" `: [" Z% q& |0 P
  string uri = "http://127.0.0.1/rss/sina.aspx";0 v* A# m. i4 V
  stream stream = wc.openread(uri);
& _& c9 V. Y: a  streamreader sr = new streamreader(stream);; F& P8 y  `9 `5 l
  string strline = "";( k* |; Q6 H2 V. m
  while ((strline = sr.readline()) != null)
! C) O6 |- E# i) N: J% ], b  {3 K2 R- ~3 P( I( c% Q" q! q% e5 L- Z/ {
  this.listbox1.items.add(strline);
) u2 X" [, X% k. G& _8 J  }
, i1 `. D& {0 q0 B+ l; {  sr.close();
7 H  \' C$ S4 R& `  ~+ N  }# L; [3 ^' I" q+ ?
  #endregion! K" N# N1 ^. R/ {, k0 i9 d4 X, I
  示例:openwriter(string uri,string method);
# }( z, Q8 I2 I1 q) i; h  ?9 N7 l+ z5 @0 R( K& I
  1
( g+ K8 [0 b, h( c  2
$ \( I$ U+ T4 r4 T0 r' \  37 D9 r/ A5 P6 R: o* h/ h
  4
$ V0 w' @2 f. D" j, ~, q  5
+ C5 R6 z/ {8 r2 P. q7 C" n- |1 Z  6- p" Z3 e' u) B  J% c, t$ _
  7, {! R+ i9 g6 f" T( D
  8! P  i, @0 H6 y, N7 h. `% O
  91 N9 x( l0 `6 t3 _' m
  10
# R" Q+ A- R3 B2 N  11& A' q3 N7 o! l" D$ {0 O+ z' H9 [: C
  12' K% t$ n* K! I; e9 K
  13
( a2 o* H8 [# `, A9 H  142 T% c/ W9 H; T" X* N# i2 a7 w  Y
  15
$ H$ n& G: p6 q2 i4 M: G( Q  16
, q) {  d+ C6 e" w: b' a  17$ `' y( N* {( V! s+ l. f
  18$ r3 u2 X4 c# P9 i& N) O' p
  19openwriter(string uri,string method)/ l( }$ A, t# n5 R( `- p
  #region 打开一个流使用指定的方法将数据写入到uri
7 ~3 N6 q1 O8 f2 h  ///9 g* {' x6 H) N3 U) g$ z. Y
* x( n, D, |5 n5 v. `
  /// 打开一个流使用指定的方法将数据写入到uri( H- q8 J% W/ e+ m
  ///+ S; E" m  T) Z: f

' d7 N4 I8 w2 n3 C: G
  P" }  y* L3 M  ///. [0 i2 f6 y' U# M! E4 q
  ///
4 W# J: G! t! m/ k  private void button1_click(object sender, eventargs e)
$ s  X# E2 k4 s  {/ c3 r0 m% e0 Y, y0 R' t% q1 ]
  webclient wc = new webclient();
2 _# o4 K' Z) l7 Q9 c( O  string uri = "http://192.168.0.35/cims30/rss.txt";. k& N, B$ ~" T% u
  stream stream = wc.openwrite(uri, "put");
% b$ E4 b3 o, ], D4 [  streamwriter sw = new streamwriter(stream);! Z+ Z1 M' D0 v3 N; F1 q6 Y
  sw.writeline("helloworldhelloworldhelloworldhelloworld");# O! \$ S3 k8 K3 c: c9 i5 Q0 }
  sw.flush();
+ y, _7 D/ F7 C! E, ?  sw.close();
. Y. d3 ]- Q1 s* W  messagebox.show("ok");
$ m* J" K) K  W; D" w# l" c1 w. A2 }  }
- Z" V) w* i+ K4 `2 s  #endregion
+ N8 N; Q  n5 I6 Z1 P9 O  openwriter方法返回一个可写的数据流,便于用户把数据发送给uri,可以指定用户把数据发送给主机的方法,默认是post,上例假定0.35的服务器上有一个可写的目录刺马s,这段代码是在该目录下创建rss.txt文件,其内容为“helloworldhelloworldhelloworldhelloworld”1 i3 H' y; X) I; g/ l: A
  上传文件
% x, S. M- P# \6 q) B/ x  webclient类提供了uploadfile()和uploaddata()方法,在需要投递html窗体或上传整个文件时候,就可以使用这两个方法。uploadfile()方法把文件上传到指定的位置,其中文件名字已经给出,uploaddata()方法把字节数组提供的二进制数据上传到指定的uri;
4 K0 d/ r, C- ~. d! c  示例:上传文件. O$ ]7 d) V( u8 \
  ?
+ k$ F  Q! R' x, E8 H+ L) { #region 把本地文件上传到指定uri: }8 P+ T6 v! e* i
  ///1 M3 g$ p: a" P# G/ q

# A. l* q6 b9 t& O  H7 O  /// 把本地文件上传到指定uri; s1 B6 t; B6 q$ x% m
  ///
& E3 l: u# \& u' U% g4 f" k( `; ]! U5 p  B0 W5 @% C

' @" q8 y, t( K. N: G  ///
8 D9 e5 U; @( p+ Y; a" B  ///
% s/ F, l4 q; Y' s  private void button2_click(object sender, eventargs e)1 }; C. B& n% W" i, ?
  {
6 Q! l5 s( n% B- }- c  webclient wc = new webclient();  K. g$ T$ Z& a8 b3 Y, ]: u
  string targetpath = "http://127.0.0.1/rss/data configuration.zip";# C. x% j1 p$ s$ Z! W( r3 {% f2 H
  string sourcepath = "d:\\data configuration.zip";* C' g1 Q( l- l$ N
  this.label1.text = string.format("uploading {0} to {1}", targetpath,  sourcepath);
/ f$ L- ]4 T* r* E7 O0 C  byte[] bt = wc.uploadfile(targetpath, "put", sourcepath);; b# \. ]) j1 ~6 E+ A9 |7 P
  messagebox.show("ok");
' {6 x- u4 I# N; r; v+ G  }8 }* f" j1 A& Z' W
  #endregion3 {! q9 a5 t, h) H8 X
  #region 把数据缓冲区上载到指定资源
: Y1 p& M  p: e  J6 e2 A5 I  ///6 _$ m) h1 ^+ s* e9 t
3 o: d; g- @' p; B
  /// 把数据缓冲区上载到指定资源. j5 W" m$ v4 J- u& h% j
  ///
5 T' _, j. J, e: u0 D) `9 A9 m7 J8 b1 l1 [
( |7 Z( _7 V+ v7 N' {5 ]
  ///
9 B+ _2 i: _1 p0 b0 x  ///
7 d1 @2 U  f# K8 s! R& G  private void button3_click(object sender, eventargs e)3 @! E$ N  x: M3 o3 Z9 K8 D, l0 o; X
  {* s+ i! J* G0 ?' E" Q5 T
  webclient wc = new webclient();
3 a1 t, s' ]  z( y( ?3 x; d' g: [  string targetpath = "http://127.0.0.1/rss/kaifeng.jpg";6 m4 q# l. a: ~# ^
  string sourcepath = @"c:\test.jpg";
4 |8 V  R7 x8 e! m' _  filestream fs = new filestream(sourcepath, filemode.open,  fileaccess.read);
) L. s& C+ m, o- q+ W& s  byte[] bt = new byte[fs.length];
- Y7 [+ s: Y! n7 A  U3 p  fs.read(bt, 0, bt.length);0 u/ I, A; m' d4 g" ~1 v1 F2 |0 V
  wc.uploaddata(targetpath, "put", bt);  c6 W9 R+ X! \3 P; J. ]
  }* L% @5 X$ K, ]1 H7 C, @/ r
  #endregion
+ j' }; c8 [( ~: |# m# K  webclient功能有限,特别是不能使用身份验证证书,这样,上传数据时候问题出现,现在许多站点都不会接受没有身份验证的上传文件。尽管可以给请求添加标题信息并检查相应中的标题信息,但这仅限于一般意义的检查,对于任何一个协议,webclient没有具体支持,。这是由于webclient是非常一般的类,可以使用任意协议发送请求和接受相应,它不能处理特定于任何协议的任何特性。2 V8 R  ]6 Q% A1 V1 _5 T2 R
更多技术文章信息请查看: 技术文章

回复|共 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客服 返回顶部
快速回复 返回顶部 返回列表