c# Http Post访问接口方式
一、json格式数据提交返回
提交和返回数据都为json格式
参数提交方式:application/json;charset=UTF-8
统一采用UTF-8字符编码
public string Post(string Url, string jsonParas)
{
string strURL = Url;
//创建一个HTTP请求
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(strURL);
//Post请求方式
request.Method = "POST";
//内容类型
request.ContentType = "application/x-www-form-urlencoded"; //设置参数,并进行URL编码 string paraUrlCoded = jsonParas;//System.Web.HttpUtility.UrlEncode(jsonParas); byte[] payload;
//将Json字符串转化为字节
payload = System.Text.Encoding.UTF8.GetBytes(paraUrlCoded);
//设置请求的ContentLength
request.ContentLength = payload.Length;
//发送请求,获得请求流 Stream writer;
try
{
writer = request.GetRequestStream();//获取用于写入请求数据的Stream对象
}
catch (Exception)
{
writer = null;
Console.Write("连接服务器失败!");
}
//将请求参数写入流
writer.Write(payload, 0, payload.Length);
writer.Close();//关闭请求流
// String strValue = "";//strValue为http响应所返回的字符流
HttpWebResponse response;
try
{
//获得响应流
response = (HttpWebResponse)request.GetResponse();
}
catch (WebException ex)
{
response = ex.Response as HttpWebResponse;
}
Stream s = response.GetResponseStream();
// Stream postData = Request.InputStream;
StreamReader sRead = new StreamReader(s);
string postContent = sRead.ReadToEnd();
sRead.Close();
return postContent;//返回Json数据
}
调用: string askurl = testUrl + "?sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs;
string relust = Post(askurl, "");
// 或者 string relust = Post(askurl, sid=" + sid + "&mobi=" + mobi + "&sign=" + sign + "&msg=" + encodeMsgs);
二、也是josn格式,utf8
/// <summary>
/// POST数据到指定地址
/// </summary>
/// <param name="url"></param>
/// <param name="encoding"></param>
/// <param name="data"></param>
/// <returns></returns>
public static string PostDataToUrl(string url, System.Text.Encoding encoding, System.Collections.Specialized.NameValueCollection data)
{
//设置HttpWebRequest
System.Net.HttpWebRequest request = (System.Net.HttpWebRequest)System.Net.HttpWebRequest.Create(new Uri(url));
request.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2; .NET CLR 1.1.4322; .NET CLR 2.0.50727)";
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.KeepAlive = false; byte[] buffer;
using (System.IO.MemoryStream ms = new System.IO.MemoryStream())
{
for (int i = ; i < data.Count; i++)
{
buffer = encoding.GetBytes(data.Keys[i]);
if (i > )
ms.WriteByte(Convert.ToByte('&'));
ms.Write(buffer, , buffer.Length);
ms.WriteByte(Convert.ToByte('='));
buffer = encoding.GetBytes(HttpUtility.UrlEncode(data[i]));
ms.Write(buffer, , buffer.Length);
}
buffer = ms.ToArray();
} request.ContentLength = buffer.Length;
using ( System.IO.Stream requestStream = request.GetRequestStream())
{
requestStream.Write(buffer, , buffer.Length);
requestStream.Close();
} try
{
//获取数据
using (System.Net.HttpWebResponse response = (System.Net.HttpWebResponse)(request.GetResponse()))
using (System.IO.Stream stream = response.GetResponseStream())
using (System.IO.StreamReader reader = new System.IO.StreamReader(stream, encoding))
{
string result = reader.ReadToEnd();
reader.Close();
stream.Close();
response.Close();
return result;
}
}
finally
{
request.Abort();
}
}
调用方法:
Byte[] bytes = Encoding.UTF8.GetBytes(msg);
//转换成Base64字符串
msg = BytesToBase64(bytes);
string encodeMsgs = System.Web.HttpUtility.UrlEncode(msg);//urlencode编码
NameValueCollection vc = new NameValueCollection();
vc.Add("sid", sid);
vc.Add("mobi", mobi);
vc.Add("sign", sign);
vc.Add("msg", encodeMsgs);
三、带证书Xml提交数据
public static string PostHttpsPost(string url, string data, string token,string sign, Encoding encoding)
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Ssl3 | SecurityProtocolType.Tls12 | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls;
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
System.Net.ServicePointManager.DefaultConnectionLimit = ;
Uri uri = new Uri(url);
HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
//User-AgentHTTP标头的值
request.UserAgent = "Code Sample Web Client";
request.Credentials = CredentialCache.DefaultCredentials;
request.Method = "post";
if (!string.IsNullOrEmpty(token) && !string.IsNullOrEmpty(sign))//除了Auth接口以外其他post接口都需要传这两个参数
{
request.Headers.Add("4GGOGO-Auth-Token", token);
request.Headers.Add("HTTP-X-4GGOGO-Signature", sign);
}
request.ContentType = "text/xml";
request.Headers.Add("charset:utf-8");
request.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
request.Timeout = ;
request.KeepAlive = false;
request.ProtocolVersion = HttpVersion.Version10;
request.CookieContainer = new CookieContainer();
CookieCollection cookies = new CookieCollection();
request.CookieContainer.Add(cookies);
byte[] buffer = Encoding.UTF8.GetBytes(data);
request.ContentLength = buffer.Length;
X509Certificate cer = new X509Certificate("E:\\pdata.cer", "changeit");//证书地址和密码
request.ClientCertificates.Add(cer);
System.GC.Collect();
//如果需要POST数据
if (data != null)
{
string result = "";
//reqStream.Write(buffer, 0, buffer.Length);
//reqStream.Close();
using (System.IO.Stream requestStream = request.GetRequestStream())
{
requestStream.Write(buffer, , buffer.Length);
requestStream.Close();
}
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
//获取服务端返回数据
StreamReader sr = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
result = sr.ReadToEnd().Trim();
sr.Close();
//关闭连接和流
if (response != null)
{
response.Close();
}
if (request != null)
{
request.Abort();
}
return result;
}
return "";
}
//调用:
string data = HelpCommon.GetAuthXml(requestTime, AppKey, signature);//获取xml字符串拼接,也可以是data序列化成xml数据
string reslut = WebUtils.PostHttpsPost(apiUrl, data, "", "", encoding);
var amodel = XmlHelper.XmlDeserialize<TrafficWebInAPI.Models.AuthModel.Response>(reslut);
c# Http Post访问接口方式的更多相关文章
- PHP的fsockopen方式访问接口慢的原因与优化方案
在开发过程中常常遇到这样的需求,模拟浏览器访问某接口,并获取返回数据.我们比较常使用的方法是fsockopen与接口建立连接,然后发出指令,然后通过fgets接受返回值. 但是我们发现,通过PHP模拟 ...
- 没有活动事务 链接服务器的 OLE DB 访问接口 "SQLNCLI" 无法启动分布式事务
在windows2003下执行分布式事务的时候出现如下情况. 一. 问题现象在执行分布式事务时,在sql server 2005下收到如下错误: 链接服务器"xxxxxxx"的 O ...
- Dojo Data Store——统一数据访问接口
原文地址:http://www.infoq.com/cn/articles/wq-dojo-data-store 无论在传统的桌面应用还是在主流的互联网应用中,数据始终占据着软件应用中的核心地位.当下 ...
- Java EE开发平台随手记5——Mybatis动态代理接口方式的原生用法
为了说明后续的Mybatis扩展,插播一篇广告,先来简要说明一下Mybatis的一种原生用法,不过先声明:下面说的只是Mybatis的其中一种用法,如需要更深入了解Mybatis,请参考官方文档,或者 ...
- java servlet手机app访问接口(一)数据加密传输验证
前面几篇关于servlet的随笔,算是拉通了 servlet的简单使用流程,接下去的文章将主要围绕手机APP访问接口这块出发续写,md5加密传输--->短信验证--->手机推送---> ...
- 链接服务器"(null)"的 OLE DB 访问接口 "Microsoft.Jet.OLEDB.4.0" 返回了消息 "未指定的错误"。[手稿]
消息 7302,级别 16,状态 1,第 1 行 无法创建链接服务器 "(null)" 的 OLE DB 访问接口 "Microsoft.JET.OLEDB.4.0&qu ...
- 浅淡Webservice、WSDL三种服务访问的方式(附案例)
Webservice Webservice是使应用程序以与平台和编程语言无关的方式进行相互通信技术. eg:站点提供访问的数据接口:新浪微博.淘宝. 官方解释:它是一种构建应用程序的普遍模型,可以在任 ...
- 21. 无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务”
无法执行该操作,因为链接服务器”Server_202”的 OLE DB 访问接口 “SQLNCLI10″ 无法启动分布式事务” 原因:调用存储过程的方式有问题,必须用JDBC方式调用存储过程才可以正常 ...
- JAVAEE学习——struts2_02:结果跳转方式、访问servletAPI方式、获得参数以及封装和练习:添加客户
一.结果跳转方式 <action name="Demo1Action" class="cn.itheima.a_result.Demo1Action" m ...
随机推荐
- 在jsp页面中使用jstl标签
第一步:引入标签库 <%@ taglib prefix="c" uri="http://java.sun.com/jstl/core_rt"%> 第 ...
- hadoop2.5.2学习及实践笔记(三)—— HDFS概念及体系结构
注:文中涉及的文件路径或配置文件中属性名称是针对hadoop2.X系列,相对于之前版本,可能有改动. 附: HDFS用户指南官方介绍: http://hadoop.apache.org/docs/r2 ...
- Scala 基础(1)—— 定义变量 & 定义函数
1. 使用 val & var 定义变量 Scala 中的变量被分为2种:val 和 var.其含义于 Java 中的 final 关键字类似. val 等同于被 final 修饰过的变量, ...
- 【bzoj2396】神奇的矩阵 随机化
题目描述 给出三个行数和列数均为N的矩阵A.B.C,判断A*B=C是否成立. 输入 题目可能包含若干组数据.对于每组数据,第一行一个数N,接下来给出三个N*N的矩阵,依次为A.B.C三个矩阵. 输出 ...
- SecureCRT配置设置
颜色设置 参考: http://blog.csdn.net/zklth/article/details/8937905 配置导入.导出 参考: http://jingyan.baidu.com ...
- java中的URLEncoder.encode对应JS中用decodeURIComponent,js和java编码,解码
用get请求传中文,经常搞到乱码,这几天搞搞这个东西,总结一下,以方便以后处理这类的问题. Java代码中的URLEncoder.encode方法和JS的encodeURIComponent功能差不多 ...
- java的struts2整理
readbook:struts2 先说一下struts1: struts1使用model II 模式开发,即jsp+java bean+servlet 再说它的缺陷: 1.表现层支持 ...
- [ CodeVS冲杯之路 ] P3143
不充钱,你怎么AC? 题目:http://codevs.cn/problem/3143/ 大水题一道,只要会遍历,这里讲一下思路 先序遍历:先输出,然后左儿子,最后右儿子 中序遍历:先左儿子,再输出 ...
- UVA 763 Fibinary Numbers
题意讲某个二进制按照规则每一位对应斐波那契数生成新的数字,然后2个数字求和.再求由该规则生成的二进制串.并且要求尽量用更大项的fib数(题目提示不能由连续的1就是2个连续的1(11)不如100更优) ...
- Linux高端内存映射(上)【转】
转自:http://blog.csdn.net/vanbreaker/article/details/7579941 版权声明:本文为博主原创文章,未经博主允许不得转载. 目录(?)[-] 高端内 ...