C#模拟HTTP协议请求
1 前言
http协议详解参考HTTP协议。
WEB常用Get和Post请求。
地址栏参数:url为www.viwofer.com?id=12&name=viwofer则id=12&name=viwofer为地址栏参数。key1=value&key2=value2。
Json参数:{"key1":"value","key2":"value2"}。
2 GET请求
常用Get请求使用地址栏参数
/// <summary>
/// Get获取数据
/// </summary>
/// <param name="serverUrl">服务Url</param>
/// <param name="postData">传递参数,格式如“key1=value&key2=value2”</param>
/// <returns></returns>
public static string HttpGetConnectToServer(string serverUrl, string postData = "")
{
//创建请求
var request = (HttpWebRequest)WebRequest.Create(serverUrl + "?" + postData);
request.Method = "GET";
//设置上传服务的数据格式
request.ContentType = "application/x-www-form-urlencoded";
//请求的身份验证信息为默认
request.Credentials = CredentialCache.DefaultCredentials;
//请求超时时间
request.Timeout = ;
//设置cookie
request.CookieContainer = cookie; try
{
//读取返回消息
return GetResponseAsString(request);
}
catch (Exception ex)
{
//var result = new ServerResult();
return "{\"error\":\"connectToServer\",\"error_description\":\"" + ex.Message + "\"}";
}
}
3 Post请求
常用Post请求使用地址栏参数和Json格式参数。
3.1 参数为key1=value&key2=value2
/// <summary>
/// Post获取数据
/// </summary>
/// <param name="serverUrl">服务Url</param>
/// <param name="postData">传递参数,格式如“key1=value&key2=value2”</param>
/// <returns></returns>
public static string HttpPostConnectToServer(string serverUrl, string postData)
{
var dataArray = Encoding.UTF8.GetBytes(postData);
//创建请求
var request = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
request.Method = "POST";
request.ContentLength = dataArray.Length;
//设置上传服务的数据格式
request.ContentType = "application/x-www-form-urlencoded";
//请求的身份验证信息为默认
request.Credentials = CredentialCache.DefaultCredentials;
//请求超时时间
request.Timeout = ;
//设置cookie
request.CookieContainer = cookie;
//创建输入流
Stream dataStream; try
{
dataStream = request.GetRequestStream();
}
catch (Exception)
{
return null;//连接服务器失败
}
//发送请求
dataStream.Write(dataArray, , dataArray.Length);
dataStream.Close();
//读取返回消息
//string res;
try
{
//读取返回消息
return GetResponseAsString(request);
}
catch (Exception ex)
{
//连接服务器失败
return "{\"error\":\"connectToServer\",\"error_description\":\"" + ex.Message + "\"}";
}
}
3.2 参数为{"key1":"value","key2":"value2"}
/// <summary>
/// Post获取数据
/// </summary>
/// <param name="serverUrl">服务Url</param>
/// <param name="postData">传递参数,格式如“{"key1":"value","key2":"value2"}”</param>
/// <returns></returns>
public static string HttpPostJsonConnectToServer(string serverUrl, string postData)
{
var dataArray = Encoding.UTF8.GetBytes(postData);
//创建请求
var request = (HttpWebRequest)HttpWebRequest.Create(serverUrl);
request.Method = "POST";
request.ContentLength = dataArray.Length;
//设置上传服务的数据格式 json格式的传递参数
request.ContentType = "application/json";
//请求的身份验证信息为默认
request.Credentials = CredentialCache.DefaultCredentials;
//请求超时时间
request.Timeout = ;
//设置cookie
request.CookieContainer = cookie;
//创建输入流
Stream dataStream;
try
{
dataStream = request.GetRequestStream();
}
catch (Exception)
{
return null;//连接服务器失败
}
//发送请求
dataStream.Write(dataArray, , dataArray.Length);
dataStream.Close();
//读取返回消息
try
{
//读取返回消息
return GetResponseAsString(request);
}
catch (Exception ex)
{
//连接服务器失败
//var result = new ServerResult();
return "{\"error\":\"connectToServer\",\"error_description\":\"" + ex.Message + "\"}";
}
}
4 相关代码
//============================初始化Cookie================================
private static CookieContainer cookie = new CookieContainer(); //==================================获取返回参数======================================
private static string GetResponseAsString(HttpWebRequest request)
{
try
{
var response = (HttpWebResponse)request.GetResponse();
var reader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
string res = reader.ReadToEnd();
reader.Close();//关闭读取流
response.Close();//关闭响应流
return res;
}
catch (Exception ex)
{
return null;
}
}
C#模拟HTTP协议请求的更多相关文章
- curl 模拟https协议请求
在原有基础上再添加设置下面两个参数: curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false); // 跳过证书检查 curl_setopt($ch, CURLO ...
- PHP模拟发送POST请求之一、HTTP协议头部解析
WEB开发中信息基本全是在POST与GET请求与响应中进行,GET因其基于URL的直观,易被我们了解,可POST请求因其信息的隐蔽,在安全的同时,也给开发者们模拟发送带来了麻烦.接下来的几篇博文中,我 ...
- PHP模拟发送POST请求之五curl基本使用和多线程优化
今天来介绍PHP模拟发送POST请求的重型武器——cURL函数库的使用和其多线程的优化方法. 说起cURL函数,可谓是老生常谈,但网上许多资料都在关键部分语焉不详,列出一大堆手册上的东西,搞得我入门时 ...
- httpClient模拟浏览器发请求
一.介绍 httpClient是Apache公司的一个子项目, 用来提高高效的.最新的.功能丰富的支持http协议的客户端编程工具包.完成可以模拟浏览器发起请求行为. 二.简单使用例子 : 模拟浏览器 ...
- Android 模拟HTTP协议的编码问题 Android默认编码UTF-8
Android通过GET和POST方法请求服务器和浏览器请求的过程是不一样的. 浏览器请求服务器的时候会先将中文进行UTF-8编码,然后再发送到服务器端. Android编程下我们需要通过URLEnc ...
- 【转载】curl 模拟 GET\POST 请求,curl查看响应头 以及 curl post 上传文件
补充说明:curl查看响应头 curl -I "http://www.baidu.com"HTTP/1.1 200 OK #HTTP协议 HTTP 返回码Server: Tengi ...
- 使用HttpClient配置代理服务器模拟浏览器发送请求调用接口测试
在调用公司的某个接口时,直接通过浏览器配置代理服务器可以请求到如下数据: 请求url地址:http://wwwnei.xuebusi.com/rd-interface/getsales.jsp?cid ...
- telnet客户端模拟浏览器发送请求
telnet 客户端 telnet客户端能够发出请求去连接服务器(模拟浏览器) 使用telnet之前,需要开启telnet客户端 1.进入控制面板 2.进入程序和功能,选择打开或关闭windows功能 ...
- Linux curl 命令模拟 POST/GET 请求
Linux curl 命令模拟 POST/GET 请求 本文链接:https://blog.csdn.net/sunboy_2050/article/details/82156402 curl 命 ...
随机推荐
- Java实现二进制幂
1 问题描述 使用n的二进制表示,计算a的n次方. 2 解决方案 2.1 从左至右二进制幂 此方法计算a的n次方具体思想,引用<算法设计与分析基础>第三版一段文字介绍: package c ...
- java实现第三届蓝桥杯机器人行走
机器人行走 [编程题](满分18分) 某少年宫引进了一批机器人小车.可以接受预先输入的指令,按指令行动.小车的基本动作很简单,只有3种:左转(记为L),右转(记为R),向前走若干厘米(直接记数字). ...
- java代码(5) ---guava之Multiset
guava之Multiset 一.概述 Guava提供了一个新集合类型Multiset,它可以多次添加相等的元素,且和元素顺序无关,Multiset继承于JDK的Collection接口,而不是Se ...
- python3 后台维护软件
后台维护软件 一.思路: 登录: 1.用户登录(编写GUI用户登录界面) 使用模块:tkinter,pymssql 验证逻辑: 1.获取文本框输入数据. 2.进行空值值判断 if ...else... ...
- STL中的set和multiset
注意: 1.count() 常用来判断set中某元素是否存在,因为一个键值在set只可能出现0或1次. 2.erase()用法 erase(iterator) ,删除定位器iterator指向的值 ...
- k8s+docker部署Golang项目
Go环境搭建 root账户 下载Golang [root@infra2-test-k8s /]# cd /usr/local/ [root@infra2-test-k8s local]# wget h ...
- 如何解决flutter中gradle慢的问题
初学flutter的时候,flutter run运行到有gradle的时候就停住不动了,研究后解决方法如下: 打开项目目录 中的 ...\myapp\android\gradle\wrapper\gr ...
- ubuntu12.04 跳过grub选择
1.修改/etc/grub.d/00_head文件. set timeout=-1 修改成 set timeout = ${GRUB_RECORDFAIL_TIMEOUT:--1} 2.修改/etc/ ...
- <OPTEE>Trusted Application结构分析
最近又开始和Trusted Zone打起了交道,需要把Linaro开发的开源安全系统optee os移植到实验室的老板子上.不过导师要求我先开发一个应用,在普通环境和安全环境分别有一个程序,称为hos ...
- Pants On Fire(链式前向星存图、dfs)
Pants On Fire 传送门:链接 来源:upc9653 题目描述 Donald and Mike are the leaders of the free world and haven't ...