找回密码
 立即注册
查看: 9081|回复: 119

【教程】贺岁教程之--C# get&post实例

[复制链接]

7657

回帖

86万

基友

34万

积分

天下一番

Rank: 18Rank: 18Rank: 18Rank: 18Rank: 18

伯爵荣耀

发表于 2013-1-1 03:19:36 | 显示全部楼层 |阅读模式
本帖最后由 龙 于 2013-7-20 20:27 编辑

首先说一下 这个教程面向的是具有一定C#基础知识的初学者

我相信很多人会用C#的人都是能够编一些小的算法程序 始终没有接触到网络应用
也就与贴吧辅助无缘了
说老实话 我在过去几年就是这样 接触C#有两年了 然后学vb差不多10年了吧。。。始终没有途径了解这些东西
但是C#就是这样一种简单的 高度封装的语言 用它来写网络应用 不需要了解什么tcp/ip协议
访问网页不过是一个过程 在C#中抽象为一个对象一个函数罢了

首先在程序开头加上这么一句:
  1. using System.Net;
复制代码
这是在引入名字空间 让你少打重复的字 不解释了

说之前先扯一些关于webclient
webclient的确能访问网页 但是不能设置超时和代理 导致访问一些页面就很卡= =

在这里就简单做个例子吧,比如访问百度首页:
基本的http知识也不叙述了 翻我之前那篇教程去= =
顺带提一下 抓包还是推荐用经典的httpwatch和wireshark 两者都是两个按钮开始和停止  可以抓点开始和停止中间的包

  1. Webclient wc = new Webclient();
  2. //这五个是非常常见的标头 虽然说访问百度首页不需要那么苛刻 还是加上为好
  3. wc.Headers.Set(HttpRequestHeader.Accept, "*/*");
  4. wc.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-cn");
  5. wc.Headers.Set(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
  6. wc.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
  7. wc.Headers.Set("Cache-Control", "no-cache");
  8. string str = wc.DownloadString("http://www.baidu.com");
复制代码
是的就这么几句就搞定了 要注意如果是post操作的话要用Uploadxxx函数 传两个参数为url和提交数据
如果要返回二进制数据而不是字符串的话  要用到xxxData函数  用Byte()类型的变量接收即可
还有程序初始化的时候不要忘了加上
  1. ServicePoint.Expect100Continue = False
复制代码
接下来是另一种方法 httpwebrequest 和 httpwebresponse
webclient说白了就是对上面那俩做了一个封装
还是访问百度首页:

1.写出了这句你就成功了一半
  1. HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.baidu.com");
复制代码
2.还是标头 和一些杂项

  1. req.Accept = "*/*"
  2. req.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-cn")
  3. req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
  4. req.KeepAlive = True
  5. req.Headers.Set("cache-control", "no-cache")
  6. req.ContentType = "application/x-www-form-urlencoded"
  7. req.ServicePoint.Expect100Continue = False
  8. req.Timeout = 8000;
  9. req.ReadWriteTimeout = 8000;
  10. req.Method = "GET";//这个就必须自己写了 该是什么就写什么
  11. req.Proxy = new WebProxy(...);//还是有就写 没有就不写
复制代码
3.如果是 post 还要提交数据对吧 假设数据变量的名字是postdata 这样写

  1. Stream st = req.GetRequestStream();
  2. st.Write(postdata, 0, postdata.Length);
  3. st.Close();//不要忘了关 不关就卡在那儿了
复制代码
4.

  1. HttpWebResponse res = (HttpWebResponse)req.GetResponse();
  2. st = res.GetResponseStream();
复制代码
5.这时候你有两种选择 一种是取得文本

  1. StreamReader sr = new StreamReader(st);
  2. string retstr = sr.ReadToEnd();
  3. sr.Close();
  4. st.Close();
  5. res.Close();
复制代码
retstr即是页面的文本
当然 如果你没有中间保存st的引用的话可以不用自己管他的关闭 你可以理解为C#具有强大的回收机制


还有一种是要二进制数据的:
  1. //如果直接访问Length属性会报错
  2. MemoryStream ms = new MemoryStream();
  3. byte[] buff = new byte[2048];
  4. int count;
  5. do
  6. {
  7.       count = st.Read(buff, 0, 2048);
  8.       ms.Write(buff, 0, count);
  9. } while (count != 0);
  10. st.Close();
  11. res.Close();
  12. byte[] retdata = ms.ToArray();
  13. ms.Close();
复制代码
retdata就是页面文本以二进制保存的形式 可以用encoding.getstring函数转过去


于是就大功告成了。。不过还有几件事情要做

(1)异常处理
C#访问网页失败时候都会报异常  而如果你不处理的话 就崩的跟狗似的了= =
try..catch可以插在任何地方 单条语句 for内部 或者整个函数体  总之控制流程还是很方便的


(2)程序初始化的时候
  1. ServicePointManager.Expect100Continue = False
  2. ServicePointManager.MaxServicePoints = 512;//这个貌似是最大值了
复制代码
要不然多线程会卡

好了就这样。。。。

变式提升:
以下是百度贴吧wap登录的url和数据(不考虑验证码的情况) 尖括号内是需要替换成实际情况的东西
  1. url:http://wappass.baidu.com/passport
  2. 数据:login_username=<username,utf8>&login_loginpass=<pw>&aaa=%E7%99%BB%E5%BD%95&login=yes&can_input=0&u=http%3A%2F%2Fwapp.baidu.com%2F&tpl=wapp&tn=bdIndex&pu=&ssid=&from=&bd_page_type=1&uid=1337004243356_897&type=
复制代码
请参照其模拟登录动作并获取返回文本
Hint:url编码用System.Web.HttpUtility.UrlEncode函数解决

答案:
游客,如果您要查看本帖隐藏内容请回复

评分

参与人数 2妹纸 +101 基友 +101 +100 +100 收起 理由
bdmg123 + 1 + 1 大神~~用BDUSS判断登陆成功貌似失效了
小二 + 100 + 100 + 100 + 100 很给力!

查看全部评分

回复

使用道具 举报

32

回帖

207

基友

288

积分

凡人3阶 Lv.3

Rank: 2

伯爵荣耀

发表于 2013-1-1 04:28:28 | 显示全部楼层
说 实话 我 菜鸟  看看 热闹 但是不懂~!
回复 支持 反对

使用道具 举报

2638

回帖

2万

基友

1万

积分

苍海之魂

喂,你肥皂掉了

Rank: 13Rank: 13Rank: 13Rank: 13

伯爵荣耀

发表于 2013-1-1 07:36:57 来自手机 | 显示全部楼层
前排
回复 支持 反对

使用道具 举报

34

回帖

228

基友

154

积分

凡人2阶 Lv.2

Rank: 1

伯爵荣耀

发表于 2013-1-1 07:45:06 | 显示全部楼层
沙发板凳都没了。
回复 支持 反对

使用道具 举报

4637

回帖

1万

基友

5万

积分

快乐的小二b

二、谓之双,本命双子

Rank: 17Rank: 17Rank: 17Rank: 17Rank: 17

周年纪念勋章二货勋章

发表于 2013-1-1 09:54:20 | 显示全部楼层
很不错呢
回复 支持 反对

使用道具 举报

3801

回帖

1万

基友

1万

积分

仙人3层 Lv.12

niconiconi!

Rank: 6Rank: 6

发表于 2013-1-1 10:22:56 | 显示全部楼层
慢慢看
回复 支持 反对

使用道具 举报

1万

回帖

2万

基友

5万

积分

苍海之魂

S̲̅F

Rank: 13Rank: 13Rank: 13Rank: 13

苍海的女仆会员纪念勋章周年纪念勋章

发表于 2013-1-1 12:31:12 | 显示全部楼层
支持
回复 支持 反对

使用道具 举报

361

回帖

1221

基友

1834

积分

通神3段 Lv.6

Rank: 3Rank: 3

伯爵荣耀

发表于 2013-1-1 12:41:24 | 显示全部楼层
虽然什么都不懂,但我是来看热闹的
回复 支持 反对

使用道具 举报

179

回帖

-7

基友

528

积分

通神1段 Lv.4

Rank: 2

发表于 2013-1-1 16:50:59 | 显示全部楼层
回复 支持 反对

使用道具 举报

407

回帖

6270

基友

3418

积分

通神5段 Lv.8

Rank: 4

伯爵荣耀

发表于 2013-1-1 17:54:15 | 显示全部楼层

回帖奖励 +10 基友

路过
····
回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:03 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:06 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:10 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:14 | 显示全部楼层
回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:17 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:25 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:28 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:34 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:39 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:45 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

2126

回帖

1万

基友

1万

积分

VIP1

复方草珊瑚

伯爵荣耀

发表于 2013-1-1 18:20:48 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:26 | 显示全部楼层

回帖奖励 +10 基友

不明觉屌炸
回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:29 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:32 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:35 | 显示全部楼层
回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:52 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:32:56 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:33:00 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1928

回帖

1万

基友

1万

积分

仙人2层 Lv.11

Rank: 6Rank: 6

发表于 2013-1-1 18:33:18 | 显示全部楼层

回帖奖励 +10 基友

回复 支持 反对

使用道具 举报

1270

回帖

1367

基友

3010

积分

通神5段 Lv.8

嗬嗬嗬嗬

Rank: 4

发表于 2013-1-1 18:56:46 | 显示全部楼层

回帖奖励 +10 基友

看不懂
0 0签名档吗0 0不好玩
回复 支持 反对

使用道具 举报

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

本版积分规则

小黑屋|苍海国际 ( 鲁ICP备13020644号-1 )

GMT+8, 2024-11-25 02:13 , Processed in 0.092825 second(s), 31 queries .

Powered by Discuz! Theme By eRic Modified by 4bpa

© CangHai International We Do Our Rights!

返回顶部