关闭

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

929人阅读 评论(0) 收藏 举报
分类:
首先说一下 这个教程面向的是具有一定C#基础知识的初学者

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

首先在程序开头加上这么一句:

using System.Net;

这是在引入名字空间 让你少打重复的字 不解释了

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

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

Webclient wc = new Webclient();
//这五个是非常常见的标头 虽然说访问百度首页不需要那么苛刻 还是加上为好
wc.Headers.Set(HttpRequestHeader.Accept, "*/*");
wc.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-cn");
wc.Headers.Set(HttpRequestHeader.UserAgent, "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)");
wc.Headers.Set(HttpRequestHeader.ContentType, "application/x-www-form-urlencoded");
wc.Headers.Set("Cache-Control", "no-cache");
string str = wc.DownloadString("http://www.baidu.com");

是的就这么几句就搞定了 要注意如果是post操作的话要用Uploadxxx函数 传两个参数为url和提交数据
如果要返回二进制数据而不是字符串的话 要用到xxxData函数 用Byte()类型的变量接收即可
还有程序初始化的时候不要忘了加上

ServicePoint.Expect100Continue = false;

接下来是另一种方法 httpwebrequest 和 httpwebresponse
webclient说白了就是对上面那俩做了一个封装
还是访问百度首页:

1.写出了这句你就成功了一半

HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://www.baidu.com");

2.还是标头 和一些杂项

req.Accept = "*/*"
req.Headers.Set(HttpRequestHeader.AcceptLanguage, "zh-cn")
req.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1)"
req.KeepAlive = True
req.Headers.Set("cache-control", "no-cache")
req.ContentType = "application/x-www-form-urlencoded"
req.ServicePoint.Expect100Continue = False
req.Timeout = 8000;
req.ReadWriteTimeout = 8000;
req.Method = "GET";//这个就必须自己写了 该是什么就写什么
req.Proxy = new WebProxy(...);//还是有就写 没有就不写

3.如果是 post 还要提交数据对吧 假设数据变量的名字是postdata 这样写

Stream st = req.GetRequestStream();
st.Write(postdata, 0, postdata.Length);
st.Close();//不要忘了关 不关就卡在那儿了

4.

HttpWebResponse res = (HttpWebResponse)req.GetResponse();
st = res.GetResponseStream();

5.这时候你有两种选择 一种是取得文本

StreamReader sr = new StreamReader(st);
string retstr = sr.ReadToEnd();
sr.Close();
st.Close();
res.Close();

retstr即是页面的文本
当然 如果你没有中间保存st的引用的话可以不用自己管他的关闭 你可以理解为C#具有强大的回收机制


还有一种是要二进制数据的:

//如果直接访问Length属性会报错
MemoryStream ms = new MemoryStream();
byte[] buff = new byte[2048];
int count;
do
{
    count = st.Read(buff, 0, 2048);
    ms.Write(buff, 0, count);
} while (count != 0);
st.Close();
res.Close();
byte[] retdata = ms.ToArray();
ms.Close();

retdata就是页面文本以二进制保存的形式 可以用encoding.getstring函数转过去


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

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


(2)程序初始化的时候

ServicePointManager.Expect100Continue = false;
ServicePointManager.MaxServicePoints = 512;//这个貌似是最大值了

要不然多线程会卡

好了就这样。。。。
0
0
查看评论

Scala学习之数组的进一步认识

1、先来了解下之前的Array的用法吧               val arr = Array(1, 2, 3, 4)    ...
  • mzygssk
  • mzygssk
  • 2015-08-05 15:11
  • 236

jQuery 简单的图片轮播特效

加了很多技术群,前端的,程序的,运维的等等。。。 经常有入门菜鸟问 图片轮播怎么实现。 我总是很无奈的说,这个百度上一搜一大堆视频教程,为毛不看看呢? 后来有人竟然说看不懂。我也是醉了。 于是就自己花了 5分钟。写了一个demo 很简单,甚至可以更精简。 $(funct...
  • qq812069449
  • qq812069449
  • 2015-09-14 17:44
  • 1160

DA14580学习流程和资料分享

DA14580学习流程和资料分享 一.学会BLE-DA14580你能干啥?    DA14580是全球功率最低、体积最小的SmartBond DA14580蓝牙智能系统级芯片(SoC),与竞争方案相比,该产品可将搭载应用的智能型手机配件,或计算机周边商品的电池巡航时间延长...
  • mywtil
  • mywtil
  • 2016-07-16 20:53
  • 586

Guitar Pro吉他调音软件之泛音的应用

Guitar Pro是一款备受吉他爱好者喜欢的吉他调音软件,可以直接用鼠标和键盘输入乐谱、查看、试听、打印。制作泛音、滑音等有较高的优势。
  • Bella_55
  • Bella_55
  • 2018-01-02 17:33
  • 37

VTK教程之十一 可视化基础算法-方…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <d...
  • woashizhangsi
  • woashizhangsi
  • 2014-12-12 09:41
  • 490

浅谈vb.net开发中使用excel插件代码

用VB.NET做excel插件开发,可能需要为excel添加自定义的工具栏。这个也是非常的简单的以下是引用片段:  Public Class ConnectClass Connect   Implements Extensibility.IDTExtensib...
  • weilu0328
  • weilu0328
  • 2008-06-04 10:00
  • 460

Java培训实战教程之Java基础知识精华部分(一)

很多同学在java培训过后反应,说并没有吸收课堂内的所有知识,虽然拿到了不菲的薪资,但是直到就业后,也只是吸收了课堂上71.2%的知识,java培训学院特此让专人编写此篇文章,只为帮助更多的同学! 写代码: 1,明确需求。我要做什么? 2,分析思路。我要怎么做?1,2,3。 3,确定步骤。每...
  • smile_mengy
  • smile_mengy
  • 2016-08-17 21:35
  • 512

VTK教程之十二&nbsp;可视化基础算法-几…

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <d...
  • woashizhangsi
  • woashizhangsi
  • 2014-12-12 09:41
  • 870

CG绘画新手入门教程之人体结构与比例画法讲解

CG绘画新手入门教程之人体结构与比例画法讲解
  • QQ1005150359
  • QQ1005150359
  • 2017-11-08 12:19
  • 220

Lua学习笔记 第十七章 弱引用table

Lua采用了自动内存管理机制。一个程序只需创建对象,而无需删除对象。通过使用垃圾 收集机制,Lua会自动地删除那些已成为垃圾的对象。这减轻了程序员在内存管理方面的 负担,更重要的是将程序员从许多内存的bug中(如无效指针、内存泄露)中解放出来。 垃圾收集器只能回收那些它认为是垃圾的东西,它不会...
  • wang1029
  • wang1029
  • 2014-08-26 15:24
  • 337
    个人资料
    • 访问:525922次
    • 积分:10879
    • 等级:
    • 排名:第1798名
    • 原创:152篇
    • 转载:34篇
    • 译文:423篇
    • 评论:35条
    关于我
    赞助我

    文章分类
    最新评论