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

    MSSQlServer所谓的分布式查询(Distributed Query)是能够访问存放在同一部计算机或不同计算机上的SQL Server或不同种类的数据源, 从概念上来说分布式查询与普通查询区别 ...

  2. [cf2015ICLFinalsDiv1J]Ceizenpok’s formula

    题意:$C_n^m\% k$ 解题关键:扩展lucas+中国剩余定理裸题 #include<algorithm> #include<iostream> #include< ...

  3. ant错误 reference classes not found

    使用ant提示reference classes not found错误 原因是 里面的一些属性的值要用on或者yes或者off或者no..用成其他,例如true,false的话就会有这个提示..

  4. Thinkphp5+plupload图片上传功能,支持实时预览图片。

    今天和大家分享一个国外的图片上传插件,这个插件支持分片上传大文件.其中著名的七牛云平台的jssdk就使用了puupload插件,可见这个插件还是相当牛叉的. 这个插件不仅仅支持图片上传,还支持大多数文 ...

  5. POJ 1064 Cable master (二分)

    题意:给定 n 条绳子,它们的长度分别为 ai,现在要从这些绳子中切出 m 条长度相同的绳子,求最长是多少. 析:其中就是一个二分的水题,但是有一个坑,那么就是最后输出不能四舍五入,只能向下取整. 代 ...

  6. POJ - 1458 Common Subsequence DP最长公共子序列(LCS)

    Common Subsequence A subsequence of a given sequence is the given sequence with some elements (possi ...

  7. 权限验证MVC

    http://www.jb51.net/article/20147.htm  引用 <authentication mode="Forms"><!--权限受到阻碍 ...

  8. Netdata 是一款 Linux 性能实时监测工具

    具体的netdata介绍请参照GIT:https://github.com/firehol/netdata/wiki 以下只介绍centos下的netdata的安装与使用: 1.安装Netdata需要 ...

  9. AI决策算法 之 GOAP (一)

    http://blog.csdn.net/lovethrain/article/details/67632033 本系列文章内容部分参考自:http://gamerboom.com/archives/ ...

  10. git配置命令

    一.Git安装及密钥的生成 1.下载Git软件:http://msysgit.github.io/ 2.桌面右键 Git Bash Here 打开git命令行: 3.ssh-keygen -t rsa ...