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

简介: 首先说一下 这个教程面向的是具有一定C#基础知识的初学者我相信很多人会用C#的人都是能够编一些小的算法程序 始终没有接触到网络应用也就与贴吧辅助无缘了说老实话 我在过去几年就是这样 接触C#有两年了 然后学vb差不多10年了吧。
首先说一下 这个教程面向的是具有一定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;//这个貌似是最大值了

要不然多线程会卡

好了就这样。。。。
相关文章
|
2月前
|
网络协议 API C#
C# 中模拟 POST 和 GET 请求的原理与实践
【1月更文挑战第4天】在现代网络应用中,HTTP请求是客户端与服务器交互的基础。其中,GET和POST是最常用的两种请求方法。本文将介绍如何使用C#语言模拟这两种请求,并解释其背后的工作原理。我们将利用.NET框架中的HttpClient类来发送请求,并处理服务器的响应。通过本文,读者将能够理解HTTP请求的基本构成,学会在C#中编写代码来模拟这些请求,进而在开发过程中实现与Web服务的交互。
|
7月前
|
缓存 C#
C# 操作路径(Path)类方法的使用与解析运行实例
C# 操作路径(Path)类方法的使用与解析运行实例
|
9月前
|
数据采集 JSON API
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
C#网络爬虫实例:使用RestSharp获取Reddit首页的JSON数据并解析
|
15天前
|
机器学习/深度学习 算法 搜索推荐
一个开源且全面的C#算法实战教程
一个开源且全面的C#算法实战教程
|
2月前
|
开发框架 .NET Linux
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
2024年最全C# 图解教程 第5版 —— 第1章 C# 和 ,2024年最新终于有人把Linux运维程序员必学知识点全整理出来了
|
1月前
|
C#
C#||委托和事件的实例
C#||委托和事件的实例
|
2月前
|
安全 数据处理 C#
C# Post数据或文件到指定的服务器进行接收
C# Post数据或文件到指定的服务器进行接收
|
2月前
|
存储 C#
C# 数据类型与类型转换:包含教程与示例
使用正确的数据类型对应于相应的变量是重要的;这样可以避免错误、节省时间和内存,还会使您的代码更易于维护和阅读。最常见的数据类型有:
38 0
|
消息中间件 监控 数据可视化
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
influxDB的官网下载地址 https://portal.influxdata.com/downloads/打开以后,如下图所示,可以选择版本号,以及平台。此处咱们选择windows平台。不过此处没有实际的可以下载的地方,着实比较过分,不过咱们可以另辟蹊径。
873 0
【时序数据库InfluxDB】Windows环境下配置InfluxDB+数据可视化,以及使用 C#进行简单操作的代码实例
|
2月前
|
监控 安全 API
深入探讨API安全性与C#实例演示
在本篇文章中,我们将深入研究 API 的安全性,并通过使用 C# 的实际示例探索一些基本机制。
64 0