【微信小程序】微信小程序請求頭手頭添加cookie 注意事項。


起因

按照接口文檔要求,此次請求需要攜帶cookie,老是請求失敗。有時候在瀏覽器上先把請求地址跑一遍,到小程序上請求又能請求成功了,但一會又失效了,變成了靈異事件,還以為是后台的問題,但是瀏覽器和postman都能直接跑通,說明服務器沒問題。

現在把遇到的幾個坑重頭記錄下,還是自己對帶cookie的請求理解不深和項目文檔沒寫清楚應該問后端。

手動添加完請求頭后,測試請求失敗,在Chrome開發者工具里network選項卡里檢查下這次的請求的格式是否正確。

export default (url, data = {}, method = 'GET') => {
    return new Promise((resolve, reject) => {
        // 1.初始化promise狀態為pending
        // 2.執行異步任務
        wx.request({
            url: config.host + url,
            data,
            method,
            header: {
                // 請求頭添加cookie字段
                'cookie': wx.getStorageSync('cookies')
            },
            // 3.根據異步任務的結果修改promise的狀態
            success: (res) => {
                // 登錄成功請求,將用戶cookine字段保存至本地
                if (data.isLogin) {
                    wx.setStorageSync('cookies', res.cookies)
                }
                console.log(res, 'request42行');
                // 修改promise狀態為成功resolve
                resolve(res.data)
            },
            fail: (err) => {
                console.log('請求失敗', err);
                // 修改promise狀態 為成功reject
                reject(err)
            }
        })
    })
}

檢查cookie字段並進行測試

檢查storage是否儲存到了cookies,發現是個數組

請求失敗了,一看請求頭攜帶的cookie字段,cookie: [object Array],cookie明顯被處理過了。

判斷格式cookie(顯然請求頭中cookie不可能是數組)不對,然后數據被調用了Object.prototype.toString.apply(cookies)

將cookie處理為字符串后,果然不觸發Object.prototype.toString.apply()了,但是請求仍然失敗

然后用瀏覽器跑了遍接口,對應的在微信小程序對應的接口又能跑通了。打開了瀏覽器的cookie查看,明顯格式和上面在小程序顯示cookie字段不一樣
思考:這里瀏覽器直接就能跑通是因為cookie攜帶成功,但是小程序的cookie需要手動添加cookie字段。所以很明顯問題是添加的時候出現了問題。
同時靈異事件也解釋通了,是因為在用瀏覽器在對應的接口跑通了驗證了cookie所以,你回到微信小程序可以直接訪問。


思考

解決思路:肯定是要按照瀏覽器的cookie字段更改。
思考:登錄時,我們從響應體拿到了這么多cookie字段,而瀏覽器cookie就存儲四個字段。所以解決辦法顯而易見,逐一測試哪個一個字段才是我們此次請求需要添加的字段。
經過測試瀏覽器上四個字段中的一個,鍵名為MUSIC_U 的字段才是我們此次請求需要的字段


解決方法

首先需要對請求頭中拿到的cookies數組中的某一項,找到帶'MUSIC_U'字段
然后判斷本地cookies已經返回,如果沒有,直接取空串。終於成功了。


總結

1.cookie是文本,所以只能是字符串。若拿到后端返回的cookie格式不對時一定要處理
2.面對多個cookie字段時,應該搞清楚每個字段的作用。多和后端溝通。而不是自己一個一個猜浪費時間。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM