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

    一:Store介绍: state: 相当于数据 action: action去commit mutations mutation: 只有mutation 才能改变state 例: const stor ...

  2. MFC ListBox 设置水平长度

    在*.rc资源 设置可以水平滚动, 垂直滚动 但是 水平滚动无效,水平方向 一直无法显示 完整 设置代码如下 m_listBox.SetHorizontalExtent(2000); m_listBo ...

  3. java.lang.NoClassDefFoundError: org/springframework/dao/support/DaoSupport

    转自:https://blog.csdn.net/lzx159951/article/details/79753493 1. 缺少:org.springframework.transaction-3. ...

  4. iView之清空选择框

    Form表单布局的vue组件,已经增加了校验选择框,判断为空的情况下不调用接口. 后来发现,选择了选择框后,清空,再点查询,还是会调接口,看日志发现传了原来清空的值过来,实际上没有清空. 这里增加on ...

  5. linux下的函数dirname()和basename()使用

    总览 #include <libgen.h> char *dirname(char *path); char *basename(char *path); 说明 函数以 '/' 为分隔符 ...

  6. UML 学习地址

    UML 学习地址 网址:http://www.uml.org.cn/oobject/201609092.asp http://www.uml.org.cn/oobject/201009081.asp ...

  7. UVaLive 3530 Martian Mining (简单DP)

    题意:给定一个n*m的网格,每个格子里有A矿和B矿数量,A必须由右向左运,B只能从下向上运,中间不能间断,问最大总数量. 析:一个简单DP,dp[i][j] 表示 从 (0, 0) 到 (i, j) ...

  8. null, undefined 和布尔值

    说明:此类博客来自以下链接,对原内容做了标注重点知识,此处仅供自己学习参考! 来源:https://wangdoc.com/javascript/basic/introduction.html 1.n ...

  9. spring-eureka 源码解读----作为集群的eureka怎么样实现不做二次传播

    在平时工作中,eureka作为一个集群时候,我们会配置多个peer ,假设当前有服务器eureka-A,eureka-B,eureka-C. 如果Eureka A的peer指向了B, B的peer指向 ...

  10. How to generate a CSR in Microsoft IIS 7

    How to generate a CSR in Microsoft IIS 7 To help you generate your CSR for Microsoft IIS 7 we've pre ...