c# Http Get Post Put Delete类整理
来源:互联网 发布:电脑版淘宝微淘哪里看 编辑:程序博客网 时间:2024/05/18 12:42
因为对接海康的某协议用到了http,本来已以往的经验使用http会很简单,但post和get一直提交xml数据失败,几乎试遍了网上常用的方式还是没有效果,三天后还是团队有人用socket直接发送到成功了,不甘于直接用socket,继续研究终于发现header里也要存放数据才可以 ,一句 myRequest.Headers.Add("data", data);让我三天半浑身不爽,记录下,以免后边继续掉坑里
使用的类库整理如下:
public class RestClient
{
private static string BaseUri;
public RestClient(string baseUri)
{
BaseUri = baseUri;
}
#region Delete方式
private static string Delete(string uri, string data = "")
{
string serviceUrl = "";
if (BaseUri == "" || BaseUri == null)
{
serviceUrl = uri;
}
else
{
serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
}
return CommonHttpRequest(serviceUrl, "DELETE", data);
}
#endregion
#region Put方式
private static string Put(string uri, string data)
{
string serviceUrl = "";
if (BaseUri == "" || BaseUri == null)
{
serviceUrl = uri;
}
else
{
serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
}
return CommonHttpRequest(serviceUrl, "PUT", data);
}
#endregion
#region POST方式实现
private static string Post(string uri, string data)
{
string serviceUrl = "";
if (BaseUri == "" || BaseUri == null)
{
serviceUrl = uri;
}
else
{
serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
}
return CommonHttpRequest(serviceUrl, "Post", data);
}
#endregion
#region GET方式实现
private static string Get(string uri)
{
string serviceUrl = "";
if (BaseUri == "" || BaseUri == null)
{
serviceUrl = uri;
}
else
{
serviceUrl = string.Format("{0}/{1}", BaseUri, uri);
}
return CommonHttpRequest(serviceUrl, "GET");
}
#endregion
#region 私有方法
private static string CommonHttpRequest(string url, string type, string data = "")
{
HttpWebRequest myRequest = null;
Stream outstream = null;
HttpWebResponse myResponse = null;
StreamReader reader = null;
try
{
//构造http请求的对象
myRequest = (HttpWebRequest)WebRequest.Create(url);
//设置
myRequest.ProtocolVersion = HttpVersion.Version10;
myRequest.Method = type;
if (data.Trim() != "")
{
myRequest.ContentType = "text/xml";
myRequest.ContentLength = data.Length;
myRequest.Headers.Add("data", data);
//转成网络流
byte[] buf = System.Text.Encoding.GetEncoding("UTF-8").GetBytes(data);
outstream = myRequest.GetRequestStream();
outstream.Flush();
outstream.Write(buf, 0, buf.Length);
outstream.Flush();
outstream.Close();
}
// 获得接口返回值
myResponse = (HttpWebResponse)myRequest.GetResponse();
reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
string ReturnXml = reader.ReadToEnd();
reader.Close();
myResponse.Close();
myRequest.Abort();
return ReturnXml;
}
catch (Exception)
{
// throw new Exception();
if (outstream != null) outstream.Close();
if (reader!=null) reader.Close();
if (myResponse != null) myResponse.Close();
if (myRequest != null) myRequest.Abort();
return "";
}
}
#endregion
#region 通用请求
/// <summary>
/// Http通用请求
/// </summary>
/// <param name="url"></param>
/// <param name="type"></param>
/// <param name="inputData"></param>
/// <returns></returns>
public static string HttpRequest(string url, HttpType type, string inputData = "")
{
switch (type)
{
case HttpType.PUT:
return Put(url, inputData);
case HttpType.GET:
return Get(url);
case HttpType.POST:
return Post(url, inputData);
case HttpType.DELETE:
return Delete(url, inputData);
default:
break;
}
return "";
}
/// <summary>
/// Http通用请求
/// </summary>
/// <param name="ip"></param>
/// <param name="port"></param>
/// <param name="uri"></param>
/// <param name="type"></param>
/// <param name="inputData"></param>
/// <returns></returns>
public static string HttpRequest(string ip, string port, string uri, HttpType type, string inputData = "")
{
string url = "http://" + ip + ":" + port + uri;
return HttpRequest(url, type, inputData);
}
#endregion
public enum HttpType
{
PUT = 0,
GET = 1,
POST = 2,
DELETE = 3
}
}
socket实现方式也记录下吧
public static string Post(string url, string xmlString)
{
string body = HeadlerInit();
byte[] byteArray = System.Text.Encoding.ASCII.GetBytes ( body );
int bodylength = byteArray.Length;
string resc = HttpHelper.SocketSendReceive(body, "192.168.1.222", 8000);
return resc;
}
public static string HeadlerInit()
{
StringBuilder sb = new StringBuilder();
sb.AppendLine("POST /Test HTTP/1.1");
sb.AppendLine("Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*");
sb.AppendLine("User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)");
sb.AppendLine("Content-Type: application/x-www-form-urlencoded");
sb.AppendLine("Content-Length: 195");
sb.AppendLine("Host: 192.168.1.222:8000");
sb.AppendLine("Connection: Keep-Alive");
sb.AppendLine("Cache-Control: no-cache");
sb.Append("\r\n"); //死在这
sb.AppendLine("<?xml version=\"1.0\" encoding=\"UTF-8\"?> <DataServer version=\"1.0\" ><id>7</id><ip>192.168.1.250</ip></DataServer>");
return sb.ToString();
}
public static string SocketSendReceive(string request, string server, int port)
{
try
{
Byte[] bytesSent = Encoding.ASCII.GetBytes(request);
Byte[] bytesReceived = new Byte[655350];
// 创建连接
Socket s = ConnectSocket(server, port);
if (s == null)
return ("Connection failed");
// 发送内容.
s.Send(bytesSent, bytesSent.Length, 0);
// Receive the server home page content.
int bytes = 0;
string page = "Default HTML page on " + server + ":\r\n";
//接受返回的内容.
do
{
bytes = s.Receive(bytesReceived, bytesReceived.Length, 0);
page = page + Encoding.UTF8.GetString(bytesReceived, 0, bytes);
}
while (bytes > 0);
return page;
}
catch (Exception ex)
{
return ex.Message;
}
}
- c# Http Get Post Put Delete类整理
- Http Get Post put delete
- Http Get Post put delete
- Http Get Post put delete
- HTTP GET POST PUT DELETE
- Http Get Post put delete
- http post get put delete
- Http之Get,Post,put,delete请求
- swift http post/get/delete/put
- http 的get,put,post,delete
- http 中get post put delete
- Http协议-get、post、put、delete
- HTTP的get、put、post、delete
- http get post put delete 区别
- 2 HTTP GET PUT POST DELETE
- HTTP GET/POST/PUT/DELETE小结
- get,post,delete,put的http请求。
- [http]get post put delete 简介
- linux查看和关闭后台执行程序
- 渐进增强 VS 优雅降级
- 听说云服务器_也可以竞价了_1折起售_怎么买更划算??
- CentOS 7 python Opencv2.4.13安装记录 Install opencv2.4.13 python in centos 7
- 淘宝抢购倒计时(时、分、秒)
- c# Http Get Post Put Delete类整理
- 热修复Tinker的使用 + TinkerPatch补丁管理平台 gradle接入
- Spark2.2 Worker原理剖析图解及源码剖析
- paperweekly-迁移学习
- CORBA概述
- Spring-ApplicationContext
- 移动端H5页面截图【含 domtoimage、html2canvas 】
- Idea
- springBoot 动态数据源以及Mybatis多数据源