在无所知之的情况下、来了一个对接接口的任务,没办法,只能根据前端时候的经验硬着头皮上了,随后又整理了一下写的方法,主要包括了部门的创建、更新、删除、查找、然后他们的前提是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请求的更多相关文章

  1. 为什么Mozilla Thunderbird无法登陆腾讯企业邮?

    (一)问题描述 登陆腾讯企业邮提示"无法登录到服务器.可能是配置.用户名或者密码错误." (二)解决方案 手动配置 IMAP | imap.exmail.qq.com | 993 ...

  2. 微信时代,"邮"你选择 腾讯企业邮箱推新玩法

    近日,腾讯企业邮箱在广州.北京.南京三地举办<微信时代,“邮”你选择>企业邮箱新方向客户见面会,同时也正式宣布将打通微信.“拥抱”移动办公,领航国内办公工具移动之“变”. 据了解,腾讯企业 ...

  3. php通过imap获取腾讯企业邮箱信息后的解码处理

    最近需要在项目开发的oa中集成一个收发腾讯企业邮箱邮件的功能,今天做到了获取收件箱内容部分,imap如何获取就不写了,百度一堆,主要是关于内容的解码 主要以邮件主题解码为主,腾讯企业邮返回的数据主要有 ...

  4. 【php】如何配置自主域名腾讯企业邮箱

    腾讯企业邮配置 protocal ssl smtp port 465 host smtp.exmail.qq.com user email account passwd email passwd

  5. 解析腾讯企业邮箱到自己域名,设置mail的cname

    之前注册了腾讯企业邮的免费邮箱,后来想把企业邮箱和域名绑定起来,发现了一些问题. 先来看正常的部分,假设你已经注册过了腾讯企业邮箱免费版,并且已经绑定好了域名. 然后在域名提供商那里设置域名解析的MX ...

  6. 利用腾讯企业邮箱开放API获取账户未读邮件数初探

    公司一直使用腾讯提供的免费企业邮箱服务,今天用管理员帐户登录后发现,原来现在腾讯的企业邮箱也开放了部分API 你可以通过开放接口实现以下功能: 数据同步 数据同步可以帮助你同步部门成员信息,你还可以创 ...

  7. Java + 腾讯企业邮箱 + javamail + SSL 发送邮件

    说实话腾讯的企业邮箱真心不错! 腾讯企业邮箱官网:http://exmail.qq.com/login/ 新用户注册:http://exmail.qq.com/onlinesell/intro 点击开 ...

  8. 记一次PHP实现接收邮件信息(我这里测试的腾讯企业邮件)

    PHP实现接收邮件信息(我这里测试的腾讯企业邮件) , 其他的类型的没有测,应该只要更换pop3地址 端口号就可以. 代码如下(代码参考网络分享): <?php //此处查看链接状态 heade ...

  9. ubuntu 14.04 下evolution邮箱客户端设置(腾讯企业邮箱)

    安装 evolution 有PPA可用,支持 Ubuntu 14.04 及衍生系统.打开终端,输入以下命令: sudo add-apt-repository ppa:fta/gnome3 sudo a ...

随机推荐

  1. Modbus通讯协议学习 - 认识篇

    转自:http://www.cnblogs.com/luomingui/archive/2013/06/14/Modbus.html 什么是Modbus? Modbus 协议是应用于电子控制器上的一种 ...

  2. PHP生成唯一的订单号

    记:之前面试的时候被面试官问过简历项目中的订单号我是什么规则生成的,我牛逼吹过头了,乱说了一通,靠!今天在公司的项目中订单号生成,好奇,看了下,就是网上的这种而已. * * uniqid - 官方是这 ...

  3. Umbraco image中使用Crop URL

    需要在Umbraco 的image中使用crop URL.首先你需要取出这个image作为IPublishedContent 有以下两种方法 第一种: var imageId = Model.Cont ...

  4. C# 获取外网IP和运营商和城市

    /// <summary> /// 获取客户端外网IP,省份,城市,运营商 /// 2012年12月18日 15:07 /// </summary> public class ...

  5. C#中异步及winform中界面假死

    c#中可以用BeginInvoke去启动异步调用,但是有两个BeginInvoke一个是controller的BeginInvoke还有一个是委托的BeginInvoke. 主要区别是controll ...

  6. mysql由浅入深探究(四)----mysql事务详解

    什么是事务: 通俗的解释就是对数据库进行的一组完整的操作,这组完整的操作中包含一个或多个操作.解释的太low了,来点官方的:事务就是DBMS中执行的一个完整的逻辑单元,这个逻辑单元中包含一个或者多个操 ...

  7. Keras输出每一层网络大小

    示例代码: model = Model(inputs=self.inpt, outputs=self.net) model.compile(loss='categorical_crossentropy ...

  8. 洛谷P4770 [NOI2018]你的名字(后缀自动机+线段树)

    传送门 我有种自己根本没学过SAM的感觉……最后还是抄了老半天的题解…… 首先,对$S$和每一次的$T$都建一个SAM 先考虑一下$l=1,r=\left| S \right|$的情况 设$lim_i ...

  9. Java 为程序创建日志系统

    使用JAVA创建日志系统有两种方法 1.使用log4j操作日志文件 2.使用系统重定向输出日志信息 方法1:使用log4j操作日志文件(可使用jar或者xml) 步骤1:下载log4j.jar 下载地 ...

  10. python 之 time模块、datetime模块(打印进度条)

    6.9 time 模块 方法 含义 备注 time.time() 时间戳 1561013092.997079 time.strftime('%Y-%m-%d %H:%M:%S %p') 结构化时间st ...