c#使用百度短链接接口将长链接生成短连接
最近有个业务是向客户发送带短链接的短信提示。
记得以前有写过短链接的demo,然后拿过来用发现,新浪的短链接已经关闭了,市面上已经没有免费的短链接服务端。
最后公司买了百度的服务,接口文档如下:
注意到了吗?没有C#调用接口的demo。真他妈的气炸了,鄙视这家公司。
既然没有demo,那就自己写一个吧,反正就是post调用接口。
1、第一个当然是去注册个账号拿到百度的授权token啦,这个就不掩饰了,注册一下就有了。
2、新建一个短连接mvc demo。名字随便起。
3、先编写一个http请求公用函数,基本上是个框架都有公共请求类吧,拉一个出来。文档上面要求了一个method是post,content-type是json,header需要一个token。直接修改一下,上函数代码:
//调用 public static string PostWebRequest(string url, string token, string data) { string ret = string.Empty; try { WebRequest webReq = WebRequest.Create(url); webReq.Method = "POST"; webReq.ContentType = "application/json;charset=utf-8";// "application /x-www-form-urlencoded" webReq.Headers.Add("Token", token); using (var newStream = new StreamWriter(webReq.GetRequestStream())) { newStream.Write(data);//写入参数 newStream.Flush(); } using (var response = webReq.GetResponse()) { StreamReader sr = new StreamReader(response.GetResponseStream()); ret = sr.ReadToEnd(); sr.Close(); } } catch (Exception ex) { return ex.Message; } return ret; }
4、根据响应结果文档新增一个结果接收类
public class HttpResult { /// <summary> /// 0:正常返回短网址 ///-1:短网址生成失败 ///-2:长网址不合法 ///-3:长网址存在安全隐患 ///-4:内部错误 ///-5:短网址服务目前不支持该域名 ///-6:有效期设置错误 ///-1xx:Token验证失败 /// </summary> public string Code { get; set; } public string ShortUrl { get; set; } public string LongUrl { get; set; } public string ErrMsg { get; set; } public string IsNew { get; set; } }
4、由于传输用的json,所以data的格式一定要json格式。在home的index action中加入调用代码,把token改成自己在百度中获取的token
string requrl = "https://dwz.cn/admin/v2/create"; string url ="https://www.baidu.com"; string param = "{\"Url\":\"" + url + "\"}"; string result= HttpRequest.PostWebRequest(requrl,token, param); HttpResult returnResult = Newtonsoft.Json.JsonConvert.DeserializeObject<HttpResult>(result); return View(returnResult);
<div class="row"> <div> ShortCode:@Model.Code </div> <div> ShortUrl:@Model.ShortUrl </div> <div> LongUrl:@Model.LongUrl </div> <div> ErrMsg:@Model.ErrMsg </div> </div>
如果需要加入短连接有效期,就在param继续拼接,TermOfValidity:
- "long-term":长期,默认值
- "1-year":1年
文档还是简单易懂的。
最后执行效果如下:
复制shorturl到浏览器访问,直接就可以访问了。