C# 对接腾讯企业邮接口----get/post请求
在无所知之的情况下、来了一个对接接口的任务,没办法,只能根据前端时候的经验硬着头皮上了,随后又整理了一下写的方法,主要包括了部门的创建、更新、删除、查找、然后他们的前提是token的获取
首先HTTPHelper类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Net;
using System.Net.Security;
using System.Security.Cryptography.X509Certificates; namespace Name_HttpHelper
{
public class HttpHelper
{
/// <summary>
/// 创建GET方式的HTTP请求
/// </summary>
public HttpWebResponse CreateGetHttpResponse(string url, int timeout, string userAgent, CookieCollection cookies)
{
HttpWebRequest request = null;
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
//对服务端证书进行有效性校验(非第三方权威机构颁发的证书,如自己生成的,不进行验证,这里返回true)
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10; //http版本,默认是1.1,这里设置为1.0
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "GET"; //设置代理UserAgent和超时
//request.UserAgent = userAgent;
//request.Timeout = timeout;
if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
return request.GetResponse() as HttpWebResponse;
} /// <summary>
/// 创建POST方式的HTTP请求
/// </summary>
public HttpWebResponse CreatePostHttpResponse(string url, IDictionary<string, string> parameters, int timeout, string userAgent, CookieCollection cookies)
{
HttpWebRequest request = null;
//如果是发送HTTPS请求
if (url.StartsWith("https", StringComparison.OrdinalIgnoreCase))
{
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(CheckValidationResult);
request = WebRequest.Create(url) as HttpWebRequest;
request.ProtocolVersion = HttpVersion.Version10;
}
else
{
request = WebRequest.Create(url) as HttpWebRequest;
}
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded"; //设置代理UserAgent和超时
//request.UserAgent = userAgent;
//request.Timeout = timeout; if (cookies != null)
{
request.CookieContainer = new CookieContainer();
request.CookieContainer.Add(cookies);
}
//发送POST数据
if (!(parameters == null || parameters.Count == ))
{
StringBuilder buffer = new StringBuilder();
int i = ;
foreach (string key in parameters.Keys)
{
if (i > )
{
buffer.AppendFormat("&{0}={1}", key, parameters[key]);
}
else
{
buffer.AppendFormat("{0}={1}", key, parameters[key]);
i++;
}
} byte[] data = Encoding.ASCII.GetBytes(buffer.ToString());
using (Stream stream = request.GetRequestStream())
{
stream.Write(data, , data.Length);
}
}
string[] values = request.Headers.GetValues("Content-Type");
return request.GetResponse() as HttpWebResponse;
}
//post方式2---传递json字符串作为post结构体
public string SendDataByPost(string Url, string postDataStr, ref CookieContainer cookie)
{
// Logger.Info("请求信息:" + url + param);
HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(Url);
request.Method = "POST";
request.ContentType = "application/x-www-form-urlencoded";
request.Accept = "*/*";
request.Timeout = ;
request.AllowAutoRedirect = false;
byte[] bs = Encoding.UTF8.GetBytes(postDataStr);
request.ContentLength = bs.Length; string responseStr = null;
try
{
ServicePointManager.ServerCertificateValidationCallback = new
RemoteCertificateValidationCallback
(
delegate { return true; }
);
var s = request.GetRequestStream();
s.Write(bs, , bs.Length);
s.Close();
WebResponse myWebResponse = request.GetResponse();
using (StreamReader sr = new StreamReader(myWebResponse.GetResponseStream(), Encoding.UTF8))
{
// 返回结果
responseStr = sr.ReadToEnd();
}
}
catch (Exception ex)
{
// Logger.Error(ex.Message + "\r\t\n" + ex.StackTrace);
}
finally
{
request = null;
}
//Logger.Info("请求结果:" + responseStr);
return responseStr;
}
/// <summary>
/// 获取请求的数据
/// </summary>
public static string GetResponseString(HttpWebResponse webresponse)
{
using (Stream s = webresponse.GetResponseStream())
{
StreamReader reader = new StreamReader(s, Encoding.UTF8);
return reader.ReadToEnd(); }
} /// <summary>
/// 验证证书
/// </summary>
private static bool CheckValidationResult(object sender, X509Certificate certificate, X509Chain chain, SslPolicyErrors errors)
{
if (errors == SslPolicyErrors.None)
return true;
return false;
}
}
}
这里我post方式用的方式2,第一种没有测试,应该没问题。。个人觉得
接下来我只贴出封装的方法类,调用就自己写吧。。
using Name_HttpHelper;
using System;
using System.Collections;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Net;
using System.Text;
using System.Threading.Tasks; namespace AllActions
{
public class HttpAction
{
/*
* 功能:创建部门
* 参数:token 调用接口凭证, name 部门名称,
* parentid 父部门id, order 在目录中的排序
* 返回:string 创建结果
*/
public string CreateDepartmentAction(string token, string name, long parentid, int order)
{
string url = "https://api.exmail.qq.com/cgi-bin/department/create?access_token=" + token;
Encoding encoding = Encoding.GetEncoding("utf-8");
string jsonStr = "{" + string.Format("\"name\": \"{0}\",\"parentid\": {1},\"order\": {2}", name, parentid, order) + "}";
CookieContainer cookie = new CookieContainer();
HttpHelper hh = new HttpHelper();
string s = hh.SendDataByPost(url, jsonStr, ref cookie);
return s;
}
/*
* 功能:更新部门信息
* 参数:token 调用接口凭证, name 更新的部门名称,
* parentid 父部门id,为1可表示根部门 order 在目录中的排序,
* id 必填 部门id
* 返回:string 更新结果
*/
public string UpdateDepartmentAction(string token, string name, long parentid, int order, long id)
{
string url = "https://api.exmail.qq.com/cgi-bin/department/update?access_token=" + token;
Encoding encoding = Encoding.GetEncoding("utf-8");
string jsonStr = "{" + string.Format("\"name\": \"{0}\",\"parentid\": {1},\"order\": {2},\"id\":{3}", name, parentid, order, id) + "}";
CookieContainer cookie = new CookieContainer();
HttpHelper hh = new HttpHelper();
string s = hh.SendDataByPost(url, jsonStr, ref cookie);
return s;
}
/*
* 功能:查找部门信息
* 参数:token 调用接口凭证,
* name 查找部门名称,
* fuzzy 1/0:是否模糊匹配
* 返回:string 更新结果
*/
public string SelectSpecialDepartmentAction(string token, string name, int fuzzy)
{
string url = "https://api.exmail.qq.com/cgi-bin/department/search?access_token=" + token;
Encoding encoding = Encoding.GetEncoding("utf-8");
string jsonStr = "{" + string.Format("\"name\": \"{0}\",\"fuzzy\": {1}", name, fuzzy) + "}";
CookieContainer cookie = new CookieContainer();
HttpHelper hh = new HttpHelper();
string s = hh.SendDataByPost(url, jsonStr, ref cookie);
return s;
}
/*
* 功能:删除部门
* 参数:部门id
*/
public string DeleteDepartmentAction(string token, long id)
{
string url = "https://api.exmail.qq.com/cgi-bin/department/delete?access_token=" + token + "&id=" + id;
CookieCollection cookie = new CookieCollection();
int Tag = ;
string dataStr = HttpResponeTypeByGet(url, , null, cookie,Tag);
return dataStr;
}
/*
* 功能:获取调用接口的凭证 access_token
* 参数:corpid 企业id 必填
* corpsecret 应用的凭证密钥 必填
*/
public string GetAccessTokenAction(string corpid, string corpsecret)
{
string url = "https://api.exmail.qq.com/cgi-bin/gettoken?corpid=" + corpid + "&corpsecret=" + corpsecret;
CookieCollection cookie = new CookieCollection();
int Tag = ;
string tokenStr = HttpResponeTypeByGet(url, , null, cookie,Tag);
return tokenStr;
}
/*
* 功能:获取部门列表
* 参数:access_token 调用接口凭证
* id 部门id。获取指定部门及其下的子部门。id为1时可获取根部门下的子部门。
*/
public string SelectAllDepartmentAction(string token, long id)
{
string url = " https://api.exmail.qq.com/cgi-bin/department/list?access_token=" + token + "&id=" + id;
CookieCollection cookie = new CookieCollection();
int Tag = ;
string dataStr = HttpResponeTypeByGet(url, , null, cookie,Tag);
return dataStr;
} //get方式获取请求结果
public string HttpResponeTypeByGet(string url, int timeout, string userAgent, CookieCollection cookies,int Tag)
{
HttpHelper hh = new HttpHelper();
//string url, int timeout, string userAgent, CookieCollection cookies
HttpWebResponse response = hh.CreateGetHttpResponse(url, timeout, null, cookies);
//打印返回值
Stream stream = response.GetResponseStream(); //获取响应的字符串流
StreamReader sr = new StreamReader(stream); //创建一个stream读取流
string html = sr.ReadToEnd(); //从头读到尾,放到字符串html
if (Tag == )//获取token值
{
//解析数据(请求返回的结果)
string str = html.Replace(@"""", "").Replace("{", "").Replace("}", "");
string strTemp = "";
Hashtable ta = new Hashtable();
for (int i = ; i < str.Split(',').Length; i++)
{
//< span style = "white-space:pre" > </ span >
strTemp = str.Split(',')[i].ToString();
Console.WriteLine(strTemp);
ta.Add(strTemp.Split(':')[], strTemp.Split(':')[]);
}
Console.WriteLine(ta); string token = ta["access_token"].ToString();//取出哈希表中的字段的值
return token;
}
else//其他情况
{
return html;
}
}
}
}
如果想要得到其他字段信息,就自己找个方法取出来吧。。。。
其实摸透了,感觉也就这样。。。。
C# 对接腾讯企业邮接口----get/post请求的更多相关文章
- 为什么Mozilla Thunderbird无法登陆腾讯企业邮?
(一)问题描述 登陆腾讯企业邮提示"无法登录到服务器.可能是配置.用户名或者密码错误." (二)解决方案 手动配置 IMAP | imap.exmail.qq.com | 993 ...
- 微信时代,"邮"你选择 腾讯企业邮箱推新玩法
近日,腾讯企业邮箱在广州.北京.南京三地举办<微信时代,“邮”你选择>企业邮箱新方向客户见面会,同时也正式宣布将打通微信.“拥抱”移动办公,领航国内办公工具移动之“变”. 据了解,腾讯企业 ...
- php通过imap获取腾讯企业邮箱信息后的解码处理
最近需要在项目开发的oa中集成一个收发腾讯企业邮箱邮件的功能,今天做到了获取收件箱内容部分,imap如何获取就不写了,百度一堆,主要是关于内容的解码 主要以邮件主题解码为主,腾讯企业邮返回的数据主要有 ...
- 【php】如何配置自主域名腾讯企业邮箱
腾讯企业邮配置 protocal ssl smtp port 465 host smtp.exmail.qq.com user email account passwd email passwd
- 解析腾讯企业邮箱到自己域名,设置mail的cname
之前注册了腾讯企业邮的免费邮箱,后来想把企业邮箱和域名绑定起来,发现了一些问题. 先来看正常的部分,假设你已经注册过了腾讯企业邮箱免费版,并且已经绑定好了域名. 然后在域名提供商那里设置域名解析的MX ...
- 利用腾讯企业邮箱开放API获取账户未读邮件数初探
公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分API 你可以通过开放接口实现以下功能: 数据同步 数据同步可以帮助你同步部门成员信息,你还可以创 ...
- Java + 腾讯企业邮箱 + javamail + SSL 发送邮件
说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...
- 记一次PHP实现接收邮件信息(我这里测试的腾讯企业邮件)
PHP实现接收邮件信息(我这里测试的腾讯企业邮件) , 其他的类型的没有测,应该只要更换pop3地址 端口号就可以. 代码如下(代码参考网络分享): <?php //此处查看链接状态 heade ...
- ubuntu 14.04 下evolution邮箱客户端设置(腾讯企业邮箱)
安装 evolution 有PPA可用,支持 Ubuntu 14.04 及衍生系统.打开终端,输入以下命令: sudo add-apt-repository ppa:fta/gnome3 sudo a ...
随机推荐
- 使用superobject 新建Json数据(数组)
1. 要得到的Json数据:[{"name":"张三","age": 17},{"name":"李四" ...
- [poj2019]Cornfields(二维RMQ)
题意:给你一个n*n的矩阵,让你从中圈定一个小矩阵,其大小为b*b,有q个询问,每次询问告诉你小矩阵的左上角,求小矩阵内的最大值和最小值的差. 解题关键:二维st表模板题. 预处理复杂度:$O({n^ ...
- Parallel类
Parallel类是对线程很好的一个抽象.该类位于System.Threading.Tasks名称空间中,提供了数据和任务并行性. Parallel类定义了并行的for和foreach的静态方法.Pa ...
- Linux对外提供服务 网络操作 端口操作 1.开启服务监听端口 2.设置防火墙,放行访问端口的包 iptables&netfilter 四表五链和通堵策略
主题: Linux服务器上软件提供服务 1.网络操作 2.端口操作 1.网络操作 本机必须能够ping通目标主机(本地虚拟机或者远程主机) 2.端口操作 1.开启服务监听端口 2.设置防火墙,放行访问 ...
- 测试REST Web服务
EST Web服务的测试计划 线程组 HTTP请求 与任何Jmeter测试一样,我们首先需要创建一个线程组以及一个HTTP请求采样器. 如果您现在运行测试,则可能会收到错误,响应代码为415,响应消息 ...
- c# 可选参数与命名实参
c#4.0: 链接:C# 可选参数 命名参数
- Net Core2-JWT
NET Core2 http://www.cnblogs.com/wyt007/category/1130278.html JWT 设计解析及定制 前言 上一节我们讲述的书如何使用jwt token, ...
- Unbuntu 自动重启MySQL
上个月,通过Unbuntu搭建了WordPress,一切运行良好. UBUNTU搭建WORDPRESS-MYSQL-APACHE 但是,最近几天,不知道啥情况,MySQL偶尔会出现Stop:影响了bl ...
- C#远程连接sqlserver时,尝试读取或写入受保护的内存
管理员身份运行 cmd -> 输入 netsh winsock reset
- C#微信支付
回归主题,16年1月初我对微信开发比较好奇,由于自己是一个比较喜欢钱的人,所以对支付功能颇为冲动,就用公司信息在微信平台申请了一个服务号,还给腾讯打赏了300大洋做了下认证,抽空看了下微信支付官方的文 ...