NodeJs發(fā)起HTTP/HTTPS請求踩坑記

今天在做一個模擬登錄的功能,實現(xiàn)使用掃描二維碼的方式實現(xiàn)某Q的登錄刻肄。詳細過程省略瓤球,只說遇到坑與解決方案。
功能中使用的模塊如下:

  1. http
  2. https
  3. bluebird
  4. xml2js

在發(fā)生對HTTPS的POST請求時敏弃,控制臺出現(xiàn): Error: socket hand up.錯誤卦羡。

解決過程

1. 測試是否為相應的api服務器出現(xiàn)問題

我使用瀏覽器打開相應的api網(wǎng)址绿饵,瀏覽器中返回了正常的提示信息拟赊。說明api服務器沒問題粹淋。

2. 測試http/https模塊內(nèi)部機制出現(xiàn)問題

我把網(wǎng)址的修改為 快捎官網(wǎng) 。然后再運行屋匕,發(fā)現(xiàn)請求正常返回了頁面文本过吻,說明http/https模塊內(nèi)部機制可以正常使用蔗衡。

為什么別的網(wǎng)址可以正常請求而某Q的api路徑卻請求不成功?是header頭設置有誤绞惦?還是我當前請求的IP被拒絕請求?本著滿腦子的疑問樊展,我繼續(xù)進行了測試。

3. 完善請求信息雷酪,并使用其他開發(fā)語言進行同樣的請求涝婉,以進行結果對比

由于不敢確定所有的請求信息都是正確的,于是我使用java語言和python語言都做了一個副本墩弯,用來請求以進行結果對照渔工。最終發(fā)現(xiàn),所有請求數(shù)據(jù)都一致的情況下引矩,java語言和python語言可以成功地返回正確結果,而Node.js卻報錯:Error: socket hand up氛谜。

這時我心頭有千萬頭草泥馬在奔騰~~~@#$%%&*#@#$%
但程序員是不會這么容易就放棄的值漫,何況遇到這個問題的那個還有強迫癥织盼。我要克服你...

---- 繼續(xù)苦逼找尋答案中... ----

4. 轉(zhuǎn)機

詳細認(zhuang)真(bi)地閱讀了NodeJs的 http.Agent 類的文檔,才晃(yi)然(lian)大(meng)誤(bi)晚吞。原來Node.js中谋国,發(fā)起的HTTP請求,會被放入v8的網(wǎng)絡請求隊列中捌蚊,而Agent則是負責管理HTTP客戶端的連接持久性和重用性近弟。它為給定的主機和端口維護等待請求的隊列,為每個隊列重復使用一個單一的Socket連接,直接到隊列為空窗宦,此時Socket被銷毀或被重新放進池中,在該池中保持對同一主機端口的請求再次使用媒怯。而這個Socket被銷毀還是保留髓窜,取決于keepAlive的配置。
所以這就是為什么我的程序會出現(xiàn)socket hand up錯誤了鳖敷,因為我在開發(fā)模擬登錄功能時程拭,登錄成功后,有一個請求一直在輪詢檢查新消息屋吨。而另一方面山宾,我會進行其他的數(shù)據(jù)api請求鳍徽,所以,當輪詢的socket一直得不到釋放绷杜,那么其他的socket就一直處于等待(Pending)狀態(tài)鞭盟,當超時時間到達瑰剃,就會報出Error: socket hand up錯誤。

5. 解決方案

經(jīng)過以上探討粤剧,得出解決方案: 去除Socket代理挥唠,禁用請求隊列的重用,讓每次發(fā)起的請求都是新的Socket弧关。

如下代碼:

http.post({
  hostname: 'localhost',
  port: 80,
  path: '/',
  agent: false    // 禁用agent
}, res => {
  // 對響應數(shù)據(jù)進行處理
})

一番努力,終于解決了宽堆。

最后編輯于
?著作權歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末畜隶,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子籽慢,更是在濱河造成了極大的恐慌猫胁,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,639評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件届惋,死亡現(xiàn)場離奇詭異脑豹,居然都是意外死亡,警方通過查閱死者的電腦和手機拌牲,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,277評論 3 385
  • 文/潘曉璐 我一進店門拍埠,熙熙樓的掌柜王于貴愁眉苦臉地迎上來枣购,“玉大人,你說我怎么就攤上這事坷虑∑穑” “怎么了账磺?”我有些...
    開封第一講書人閱讀 157,221評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長氏捞。 經(jīng)常有香客問我逞姿,道長滞造,這世上最難降的妖魔是什么栋烤? 我笑而不...
    開封第一講書人閱讀 56,474評論 1 283
  • 正文 為了忘掉前任明郭,我火速辦了婚禮,結果婚禮上始绍,老公的妹妹穿的比我還像新娘沉唠。我一直安慰自己满葛,他們只是感情好,可當我...
    茶點故事閱讀 65,570評論 6 386
  • 文/花漫 我一把揭開白布嘀韧。 她就那樣靜靜地躺著锄贷,像睡著了一般谊却。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上炎辨,一...
    開封第一講書人閱讀 49,816評論 1 290
  • 那天碴萧,我揣著相機與錄音乙嘀,去河邊找鬼虎谢。 笑死婴噩,一個胖子當著我的面吹牛讳推,可吹牛的內(nèi)容都是我干的银觅。 我是一名探鬼主播坏为,決...
    沈念sama閱讀 38,957評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼匀伏,長吁一口氣:“原來是場噩夢啊……” “哼够颠!你這毒婦竟也來了?” 一聲冷哼從身側響起蛉抓,我...
    開封第一講書人閱讀 37,718評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎剃诅,沒想到半個月后巷送,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,176評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡矛辕,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,511評論 2 327
  • 正文 我和宋清朗相戀三年笑跛,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片聊品。...
    茶點故事閱讀 38,646評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡飞蹂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出翻屈,到底是詐尸還是另有隱情陈哑,我是刑警寧澤,帶...
    沈念sama閱讀 34,322評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站芥颈,受9級特大地震影響惠勒,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜纠屋,卻給世界環(huán)境...
    茶點故事閱讀 39,934評論 3 313
  • 文/蒙蒙 一署辉、第九天 我趴在偏房一處隱蔽的房頂上張望哥攘。 院中可真熱鬧逝淹,春花似錦尤泽、人聲如沸坯约。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,755評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽航徙。三九已至杠袱,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間纹蝴,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,987評論 1 266
  • 我被黑心中介騙來泰國打工集漾, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留绕娘,地道東北人。 一個月前我還...
    沈念sama閱讀 46,358評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像脐湾,于是被迫代替她去往敵國和親秤掌。 傳聞我的和親對象是個殘疾皇子茂洒,可洞房花燭夜當晚...
    茶點故事閱讀 43,514評論 2 348

推薦閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理腋舌,服務發(fā)現(xiàn),斷路器授艰,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,771評論 25 707
  • 發(fā)現(xiàn) 關注 消息 iOS 第三方庫圆凰、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,064評論 4 62
  • 我之前說過菇民,放棄一部分安全感其實就像德?lián)?我是典型的緊松型.就像理智與感性的斗爭.人活一世不能太過于理性,也不能太...
    我就是小賤賤閱讀 277評論 1 0
  • 月色寂寥空照影冲泥,人行凄風吹酒醒嚼酝。 十月初上茫茫意钧舌,此夜獨有踉蹌興隅很。 濁酒未飲人已醉叔营,乾坤倒轉(zhuǎn)倚南北婴谱。 人生縱有明日...
    式微_fe7e閱讀 248評論 0 1