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 ...
随机推荐
- css 中visibility:hidden和display:none有什么区别呢
<div style="width:100px;height:100px;background:red;visibility:hidden"></div>/ ...
- win10 设备摄像头,麦克风,【隐私】权限
win10 因为隐私问题, 把mic,摄像头, 定位功能关闭, 之后调用USB摄像头的时候,忘了这个, 接口API 一直返回调用失败,[不能创建视频捕捉过滤器 hr=0x80070005] => ...
- JIRA 破解文件研究(Win 7环境)
最近再次回来研究 Win 7 下的 JIRA,按网上的很多方法去尝试,竟然无法正常安装! 经过几次的弯路尝试,终究还是成功了. 嗯,有必要总结一下: 发觉网上的很多破解方法都太老!不管是什么原因,在6 ...
- Maven查找添加方式
可以通过以下链接 : https://mvnrepository.com/
- RHEL6.3卸载OpenJDK操作示范:
安装好的CentOS会自带OpenJdk,用命令 java -version ,会有下面的信息: java version "1.6.0" OpenJDK Runtime Envi ...
- 使用gdb调试c程序莫名退出定位 exit 函数
gdb 程序名称 b exit //设置exit函数断点 run //运行程序 bt //查看程序调用堆栈,定位到exit所在行
- Spring Boot错误errMsg: "request:ok"
在把评论写到数据库并且动态刷新评论区的时候,有时候正常写入,有时候就会有“request:ok”的的错误出现,错误信息如下: data: {timestamp: , error: "Inte ...
- (I/O完成端口中的)995错误
在windows下,可能会出现995的错误,msdn对该错误的解释为: The I/O operation has been aborted because of either a thread ex ...
- 《深入理解Java虚拟机》笔记03 -- 垃圾收集器
收集器可以大致分为:单线程收集器, 并发收集器和并行收集器. 并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态. 并发(Concurrent):指用户线程与垃圾收集 ...
- atcode062D(预处理&优先队列)
题目链接:http://abc062.contest.atcoder.jp/tasks/arc074_b 题意:从3*n个元素中删除n个元素,使得剩余元素中前n个元素的和减后n个元素的和最大: 思路: ...