小黄鸡网页端 消息 接口 http报文

作者:http://www.cnblogs.com/hdl1992/

之前看过一篇博文(http://www.cnblogs.com/txw1958/archive/2013/02/07/weixin-if8-simsimi.html)也是调用小黄鸡网页端的消息接口,但是他的做法是直接用GET请求调用,但这样会被检测出来,导致不会返回正确的数据,只会返回{"response":"SimSimi is tired, I only can speak 200 time a day. Please visit again tomorrow. See ya~ ","id":1,"result":100,"msg":"OK."},原因应该是调用这个接口有限制。虽然直接用GET请求不行,但可以组装完整的http报文后在发送GET请求。

但在这之前需要做些准备工作——用wireshark这款软件抓取在小黄鸡网页端发送消息时的数据包。抓包情况如下:

发送消息的包

主要是看cookie的内容,因为太长了贴图看不到,后来经过试验得出cookie要包括这几个变量:sagree、selected_nc、JSESSIONID、AWSELB

接收消息的包

可以看出返回的数据是一个json数据

做到这里就可以组装一个完整的http报文调用小黄鸡的消息接口了,不过在这之前最好了解下http报文的格式。我是用php的curl功能进行调用,整个流程代码如下:

 1 <?php
 2 function simsimiHttp($keyword)
 3 {
 4     $JSESSIONID = 'JSESSIONID=B86064A18BB84AB21DF283963671E42C';
 5     $AWSELB = 'AWSELB=15E16D030EBAAAB8ACFf4BD9BB7E0CA8FB501388662941563CCCE3FBA00C1966E7EFC7E79C02
 6                       70B337A9EB2DC66B3E19A07708673470FDFA0B2C01AB735E6CC2ABE3DC5F3AF';
 7     //模拟http报文发送消息
 8     $ch = curl_init('http://www.simsimi.com/func/req?lc=ch&msg='.$keyword);
 9     $header = array("Accept: application/json, text/javascript, */*; q=0.01",
10                         "X-Requested-With: XMLHttpRequest",
11                         "User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
12                                      Chrome/27.0.1453.116 Safari/537.36",
13                         "Content-Type: application/json; charset=utf-8",
14                         "Referer: http://www.simsimi.com/talk.htm",
15                         "Accept-Encoding: gzip,deflate,sdch",
16                         "Accept-Language: zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3",
17                         "Cookie: sagree=true; ".$AWSELB."; selected_nc=ch; ".$JSESSIONID,
18                         "Connection: keep-alive"
19                         );
20
21     curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
22     curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1);
23     curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
24     $data = curl_exec($ch);
25     curl_close($ch);
26
27     return $data;
28 }
29
30 //转义特殊字符
31 function changeSpecialCharacter($str)
32 {
33     $str = str_replace(' ', '%20', $str);
34     $str = str_replace('@', '%40', $str);
35     $str = str_replace('#', '%23', $str);
36     $str = str_replace('%', '%25', $str);
37     $str = str_replace('&', '%26', $str);
38     $str = str_replace('(', '%28', $str);
39     $str = str_replace(')', '%29', $str);
40     $str = str_replace('+', '%2B', $str);
41     $str = str_replace('=', '%3D', $str);
42     $str = str_replace('<', '%3C', $str);
43     $str = str_replace('>', '%3E', $str);
44     $str = str_replace('"', '%22', $str);
45     $str = str_replace(',', '%2C', $str);
46     $str = str_replace('/', '%2F', $str);
47     $str = str_replace(':', '%3A', $str);
48     $str = str_replace(';', '%3B', $str);
49     $str = str_replace('?', '%3F', $str);
50     $str = str_replace('\\', '%5C', $str);
51     $str = str_replace('|', '%7C', $str);
52
53     return $str;
54 }
55
56 $keyword = 'hello world';
57 echo simsimiHttp(changeSpecialCharacter($keyword));
58 ?>  

其中simsimiHttp是组装报文调用小黄鸡消息接口的函数,其中最主要的是仿造上面抓取的发送消息包的格式构造正确的http请求报文头。值得注意的是因为我们是用GET请求调用接口,需要把我们发送的消息添加到请求的url中,因此需要发送的消息中的特殊字符(例如空格,<,>这些字符)转义成正确的形式,所以要有changeSpecialCharacter这个函数。以上代码调用的结果为{"response":"侬好","id":24444807,"result":100,"msg":"OK."}。一开始还担心cookie的有效期的问题,但后来总结出不用担心这个问题,甚至不用担心cookie变量的值是否正确,只需要cookie包含那几个变量。

不过这个做法的效率不是很高,可能是因为小黄鸡的服务器在国外的原因,平均一次调用需要1秒左右的时间(在新浪SAE估计更慢)。

效率测试——使用Apache的ab功能,用10个并发完成30请求, 命令行为“ab -n 30 -c 10 http://localhost/test.php”,结果如下

因此,对响应速度要求比较高的应用不推荐使用这种做法。不过也可以尝试使用国外的服务器,这样的话响应速度应该会提高不少。

转载于:https://www.cnblogs.com/hdl1992/p/3264135.html

组装http报文调用小黄鸡网页端消息接口相关推荐

  1. 小黄鸡 php,PHP调用小黄鸡 api post发送

    页面 function do_post_request($url, $data, $optional_headers = null) { $params = array('http' => ar ...

  2. Python实战系列之调用小黄鸡simsimi

    直接从人人网小黄鸡代码里面提取一下了.https://github.com/insun/xiaohuangji   懒得申请SIMSIMI_KEY的话伪造User-Agent和Referer也能获取到 ...

  3. 通过调用小黄鸡接口进行自聊天

    import urllib2 import json import sys reload(sys)sys.setdefaultencoding('utf-8')def xiaohuangji(cont ...

  4. 小黄鸡 php,php版小黄鸡simsimi聊天机器人接口分享

    小黄鸡SimSimi是一个可爱的智能聊天机器人,他能和用户进行有趣的对话,本文主要介绍了php版小黄鸡simsimi接口使用的示例,大家参考使用吧 复制代码 代码如下: //----------- 抓 ...

  5. 小黄鸡simsimi聊天机器人接口分享

    小黄鸡SimSimi是一个可爱的智能聊天机器人,他能和用户进行有趣的对话,本文主要介绍了php版小黄鸡simsimi接口使用的示例,大家参考使用吧 代码如下: <?php function si ...

  6. Simsimi 小黄鸡机器人最新无限制接口api simsimi机器人接口api 微信公众号

    一.什么是Simsimi? simsimi公司是提供智能服务,其中一个服务是simsimi聊天机器人服务,每天有超过百万的用户聊天,国内最大的搜索引擎--百度的产品siri使用的就是simsimi提供 ...

  7. 小黄鸡微信接口 php,php版小黄鸡simsimi聊天机器人接口分享_PHP教程

    复制代码 代码如下: function simsimi($keyword) { $keyword = urlencode(urlencode($keyword)); //---– 获取COOKIE - ...

  8. php小黄鸡,php版小黄鸡simsimi聊天机器人接口分享_PHP教程

    复制代码 代码如下: function simsimi($keyword) { $keyword = urlencode(urlencode($keyword)); //---– 获取COOKIE - ...

  9. php机器人聊天对话框,php版小黄鸡simsimi聊天机器人接口分享

    function simsimi($keyword) { $keyword = urlencode(urlencode($keyword)); //----------- 获取COOKIE ----- ...

  10. java simsimi_PHP_php版小黄鸡simsimi聊天机器人接口分享,复制代码 代码如下:?phpfuncti - phpStudy...

    function simsimi($keyword) { $keyword = urlencode(urlencode($keyword)); //----------- 获取COOKIE ----- ...

最新文章

  1. lnline Hook初试
  2. vue 优化CDN加速
  3. kafka-python 停止消费
  4. python入门之运算符的使用的答案_python入门教程之基本算术运算符
  5. background-size 兼容ie8以下浏览器的方法
  6. 微信又出了一款新的APP
  7. 计算机系统-Unicode字符集与它包含的UTF-8解决方案
  8. Bootstrap-datetimepicker控件使用
  9. JVM垃圾回收机制之引用类型
  10. skyline 环境配置
  11. 暑假视力如何保护?护眼台灯可以保护视力
  12. 禁止计算机使用u盘启动,电脑禁用u盘的设置方法
  13. Github上的开源项目3
  14. 【Spark】Spark Quick Start(快速入门翻译)
  15. Java1.8接口方法都是抽象,判断(1分) Java接口中所有的方法都是抽象的。
  16. 崩坏星穹铁道PC、安卓、iOS三端配置要求
  17. 如何在应用中打开系统播放器
  18. 求个人所得税和税后收入
  19. IaaS PaaS SaaS云服务三种应用模式
  20. Linux下 Xpad不能移动拖动 解决办法

热门文章

  1. 计算机科学 院士 高校,快报!第5轮学科评估计算机科学与技术评委会名单,看有谁上榜了...
  2. python搜索关键词的公众号文章标题和路径_微信文章关键词爬虫教程
  3. Adobe Flash Player 是什么
  4. 计算机再带word打不开怎么办,word打不开怎么办
  5. 如何解决Word文件打不开呢?几个简单的步骤
  6. 计算机多媒体中的媒体种类,多媒体计算机中的媒体信息是指什么
  7. Windows XP/2000实现自动登陆(加入域和未加域两种情况)
  8. 创业感悟:有舍才会得,舍得才见风景
  9. 大学综评自招面试 计算机专业,自主招生中的综合评价面试技巧
  10. 【Win10 + Ubuntu 16.04/18.04双系统 + 双硬盘/单硬盘 安装】传统意义双系统