C# 是一种面向对象的编程语言,提供了强大的Web请求库和API来执行 HTTP GET 和 POST 请求。在C#中,我们可以使用 System.Net 命名空间下的 WebRequest 和 WebResponse 类来实现Web请求,并使用HttpWebRequest 和 HttpWebResponse 类来支持 HTTP GET 和 POST 请求。

对于 HTTP GET 请求,我们可以创建一个 WebRequest 对象,通过指定请求的 URL 和请求方法,然后调用 GetResponse() 方法来获取响应的 WebResponse 对象。我们可以从响应体中提取信息,并将其转换成字符串或字节数组等。对于 HTTP POST 请求,我们使用 HttpWebRequest 对象来构建请求,通过设置请求的属性(如 Method, ContentType, ContentLength, UserAgent等)和Post数据,然后调用 GetResponse() 方法来获取响应的 HttpWebResponse 对象。

在使用WebRequest,WebResponse,HttpWebRequest和HttpWebResponse类时,应该注意异常处理(如超时、服务器错误、协议错误),并适当设置请求和响应的头文件(如Cookies、UserAgents、Referers、Headers等)。

通过配合new WebClient()自己封装接口HttpGetPage(string url,string coding)用户传入网站地址以及编码方式,即可下载指定页面到变量中。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text; namespace ConsoleApplication1
{
class Program
{
public static string HttpGetPage(string url,string coding)
{
string pageHtml = string.Empty;
try
{
using(WebClient MyWebClient = new WebClient())
{
Encoding encode = Encoding.GetEncoding(coding);
MyWebClient.Headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36 (KHTML, like Gecko) Chrome/68.0.3440.84 Safari/537.36");
MyWebClient.Credentials = CredentialCache.DefaultCredentials;
Byte[] pageData = MyWebClient.DownloadData(url);
pageHtml = encode.GetString(pageData);
}
}
catch { }
return pageHtml;
} static void Main(string[] args)
{
var html = HttpGetPage("https://www.baidu.com","utf-8"); Console.WriteLine(html);
Console.ReadKey();
}
}
}

POST请求与Get类似,此处封装一个HttpPost(url, dic);函数,传入网站路径以及需要推送的键值对,即可使用。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.IO; namespace ConsoleApplication1
{
class Program
{ public static string HttpPost(string url, Dictionary<string, string> dic)
{
string result = "";
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(url);
req.Method = "POST";
req.UserAgent = "Mozilla/5.0 (Windows NT 10.0; WOW64)AppleWebKit/537.36";
req.ContentType = "application/x-www-form-urlencoded";
#region
StringBuilder builder = new StringBuilder();
int i = 0;
foreach (var item in dic)
{
if (i > 0)
builder.Append("&");
builder.AppendFormat("{0}={1}", item.Key, item.Value);
i++;
}
byte[] data = Encoding.UTF8.GetBytes(builder.ToString());
req.ContentLength = data.Length;
using (Stream reqStream = req.GetRequestStream())
{
reqStream.Write(data, 0, data.Length);
reqStream.Close();
}
#endregion
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
Stream stream = resp.GetResponseStream(); //获取响应内容
using (StreamReader reader = new StreamReader(stream, Encoding.UTF8))
{
result = reader.ReadToEnd();
}
return result;
} static void Main(string[] args)
{
string url = "http://www.baidu.com/";
Dictionary<string, string> dic = new Dictionary<string, string> { };
dic.Add("username","lyshark");
HttpPost(url, dic); Console.ReadKey();
}
}
}

C# 实现对网站Get与Post请求的更多相关文章

  1. Java-如何挖取某个网站中的ajax请求信息

    通常情况,通过网络爬虫挖取到的基本为网页静态内容,而动态ajax取数的内容是我个人暂时不知如何一次性把网站中的ajax获取 这里介绍的是某个网站中的某一个ajax多某个table刷新,期数据,并提供其 ...

  2. 网站SEO,HTTP请求的关键数字----6

    客户端浏览器向服务器请求一个网页素材. 那么网页素材是通过什么方式,什么顺序被下载下来的呢. 我今天做了个简单的测试. 首先,准备测试文件 写一个网页,网页中引用若干的资源文件. 同一文件的不同的参数 ...

  3. 网站优化--减少HTTP请求

    发送HTTP请求需要经过几个过程 域名解析--TCP连接--发送请求--等待--下载资源--解析时间 这其中需要花费一定时间,因此,尽可能的需要减少网站的HTTP请求,方法有以下几种: 1 . css ...

  4. nginx记录分析网站响应慢的请求(ngx_http_log_request_speed)

    nginx模块ngx_http_log_request_speed可以用来找出网站哪些请求很慢,针对站点很多,文件以及请求很多想找出哪些请求比较慢的话,这个插件非常有效.作者的初衷是写给自己用的,用来 ...

  5. WSGI网站部署以及requests请求的一些随想.

    一直想项目,没怎么写过后端服务,但很多时候,有些服务又是公用的,平时一般都用redis来当做通信的中间件,但这个标准的通用型与扩展信太差了. 与一些群友交流,建议还是起http服务比较好,自己也偏向与 ...

  6. SetEnvlfNoCase 记录从自己网站之外传来的请求

    <FilesMatch \.(jpg|gif|png)$> SetEnvIfNoCase Referer "^http://www.example.com/" loca ...

  7. 网站收到的url请求链接,字母全部变为小写

    http://www.ithao123.cn/content-5360465.html

  8. asp.net 网站所有请求跳转到同一个页面

    应用场景:网站维护和未开发完成时,一般需要把所有请求都跳转的一个相关说明的页面,这样用户不至于困惑这个网站是不存在还是怎么了. Solution1:使用一个名称为 app_offline.htm(名字 ...

  9. Django之CSRF跨站请求伪造(老掉牙的钓鱼网站模拟)

    首先这是一个测试的代码 请先在setting页面进行下面操作 注释完成后,开始模拟钓鱼网站的跨站请求伪造操作: 前端代码: <!DOCTYPE html> <html lang=&q ...

  10. 解决Chrome94之后非安全网站请求localhost报CORS问题

    问题 自从谷歌浏览器升级到chrome94版本后,在非安全网站下通过请求本地接口就会出现以下错误: Access to XMLHttpRequest at 'http://127.0.0.1:1000 ...

随机推荐

  1. C++:如何将 LLVM 嵌套到你的项目中去

    IDE: Clion LLVM cmake_minimum_required(VERSION 3.9) project(clang_demo) find_package(LLVM REQUIRED C ...

  2. Codeforces 189 A. Cut Ribbon(DP 恰装满的完全背包问题)

    题目链接 Polycarpus has a ribbon, its length is n. He wants to cut the ribbon in a way that fulfils the ...

  3. 三、mycat实验数据

    系列导航 一.Mycat实战---为什么要用mycat 二.Mycat安装 三.mycat实验数据 四.mycat垂直分库 五.mycat水平分库 六.mycat全局自增 七.mycat-ER分片 最 ...

  4. win32com报错:无效的类字符串(Invalid Class String)

    异常:无效的类字符串 (Invalid Class String) . 使用python操作COM组件的朋友应该都碰到过,这个报错来自于python标准库pythoncom.win32com也是建立在 ...

  5. Java面试——数据库知识点

    MySQL 1.建 主键:数据库表中对储存数据对象予以唯一和完整标识的数据列或属性的组合.一个数据列只能有一个主键,且主键的取值不能缺失,即不能为空值(Null). 超键:在关系中能唯一标识元组的属性 ...

  6. CentOS下PHP7安装mysqlnd模块

    单独安装mysqlnd驱动 如果是centos下的yum安装方式,那么可以参考后续操作. 因为mysqlnd是mysql原生的驱动,如果已经安装了php-mysql,则需要先卸载,否则会遇到冲突. 先 ...

  7. 使用VS开发人员工具观察类在内存中的布局

    1.先要生成相应文件 2.打开VS2019开发人员工具 3.cd至文件目录 4.输入cl /d1 reportSingleClassLayoutanimal demo.cpp 其中reportSing ...

  8. [转帖]mysql 数据库视图迁移

    https://www.cnblogs.com/phpyangbo/p/6132821.html 最近做一个项目,为了方便查询,建了好多的视图表,正式上线的时候需要把本地数据库迁移到服务器上. 按照常 ...

  9. 开启大页与否对CacheBuffer的影响的学习

    开启大页与否对CacheBuffer的影响的学习 背景 最近遇到数据库压力较高的场景. 原厂工程师到位后修改了几个参数(自己以为参数没问题) 然后最近一周环境就比较正常了. 这个地方很打脸, 自己没有 ...

  10. [转帖]一文说清 Linux System Load

    https://zhuanlan.zhihu.com/p/447661302 双十一压测过程中,常见的问题之一就是load 飙高,通常这个时候业务上都有受影响,比如服务rt飙高,比如机器无法登录,比如 ...