這個方法在於獲取cookie進行驗證,今天我嘗試用curl模擬登錄小黃雞,可是小黃雞的登錄是調用谷歌或facebook的接口授權,而且缺少代理服務器,所以決定放棄使用小黃雞。現在我使用圖靈機器人,這個應用的接口調取速度很快而且應用的功能很強大,遠遠不止聊天那么簡單。
現在網上關於調用小黃雞接口的內容,基本都是一樣的,看着他們的帖子自己調試了幾個小時,一直有各種各樣的問題,最后還是自己搞定的,所以來寫一下我遇到的問題和解決辦法,還有我封裝的小黃雞的接口。
本來想在微信上弄一個聊天機器人,注冊了一個小黃雞的試用賬戶。調試了一會發現瀏覽器直接打開是可以正常顯示的,可是php調用就是會顯示亂碼。上網找說是gzip的壓縮問題,使用gzdecode()函數即可。看着很簡單的解決辦法,到我手上又出問題了,使用gzdecode()之后,會彈警告:data error,然后我又開始找gzdecode() data error。然而網上關於這個問題的帖子全是英文的,雖然我有谷歌的翻譯,可是翻譯后發現和我出現的問題完全不同,找了幾篇都是這樣。沒有了頭緒后我開始研究zlib庫,我發現對字符串gzencode()后和php調用時產生的亂碼是不同的。然后我在手冊中發現cURL可以通過curl_setopt($ch, CURLOPT_ENCODING, $value)設置header的Accept-Encoding,設置之后果然還是一樣的亂碼。再我又嘗試了幾次后,接口傳來數據調用次數不足,於是我放棄了嘗試,決定不使用官方的接口而自己直接傳值給小黃雞的服務器。
打開並登錄小黃雞官網后,我隨便輸入幾句話,然后按F12打開了谷歌瀏覽器的調試窗口,終於找到發送數據的請求(下圖)。
然后找到了小黃雞的url地址。我把信息修改了一下粘貼到瀏覽器上,果然收到了消息,看來是讓我蒙對了。
於是我把官方的接口url替換成現在這個,發現返回header401 Unauthorized。然后在瀏覽器中找到登錄小黃雞時的cookie,使用curl_setopt($ch, CURLOPT_COOKIE, $value)設置cookie,即可正常顯示。
本人剛學php不久,這篇文章僅供參考,大牛請無視。下面貼上代碼。
1 private function testSim($text) 2 { 3 $url = 'http://www.simsimi.com/getRealtimeReq?lc=ch&ft=1&normalProb=4&reqText='.rawurlencode($text).'&status=W&talkCnt=1'; 4 $ch = curl_init($url); 5 curl_setopt($ch, CURLOPT_COOKIE, 'user_displayName=%E5%B0%BC%E5%8F%A4%E6%8B%89%E6%96%AF%E6%9D%8E%E7%88%B1%E6%96%B0%E8%A7%89%E7%BD%97%E5%A4%9A; user_photo=undefined; dotcom_session_key=s%3AjkNa4Zlg-gegNFKudhRY_-aLPDu6rh1q.%2BeG2TyuUsXt9pUNGoP%2F5u%2F9BfXeXosg0KxwCMKCCmC4; normalProb=4; lc=ch; lname=%E4%B8%AD%E6%96%87(%E7%AE%80%E4%BD%93); _ga=GA1.2.1028504419.1509626254; _gid=GA1.2.1289853464.1509775119; bbl_cnt=0; currentChatCnt=2'); 6 curl_setopt($ch, CURLOPT_BINARYTRANSFER, 1); 7 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); 8 $res = curl_exec($ch); 9 curl_close($ch); 10 if (isset($res)) { 11 $json = json_decode($res, true); 12 return $json['respSentence']; 13 } else { 14 return '未獲取到數據!'; 15 } 16 }