這個字段到底有沒有傳?

開發(fā)過程中總是會遇到諸如題目中的問題,前后端各執(zhí)一詞,有時不惜為此爭得臉紅脖子粗。這里記錄一下,工作中我是怎么處理這些問題的,大家慎重參考,學(xué)藝不精被打臉,跟本人無關(guān)。

這篇文章主要講這么幾個方面:1.服務(wù)端到底有沒有返回某個字段?2.客戶端到底有沒有傳某個字段到服務(wù)端?3.服務(wù)端要求傳數(shù)組,可是Http請求里面的數(shù)組是個什么鬼?各位乘客請系好安全帶,馬上就要發(fā)車了!

1. 服務(wù)端到底有沒有返回某個字段?

核心思想就一句話:重新請求,重新返回。

我好想聽見有人說:"我褲子都脫了,你給我看這個?"。這位乘客別生氣,且容我慢慢道來。你可以在Android Monitor里面把返回的數(shù)據(jù)輸出一下,然后把CTRL+C/V轉(zhuǎn)發(fā)給服務(wù)端的同學(xué)。But!服務(wù)端的同學(xué)就開始跟你懟:"我返回的數(shù)據(jù)沒有問題呀";"你本地是不是加了緩存";"你調(diào)錯接口了吧"...Shut Up!即使你把他說服了,你還得配合他聯(lián)調(diào),繩命是剁么的回晃,繩命是入刺的井猜,哪能浪費在這些事情上。

我們的目標(biāo)是重新構(gòu)造一個請求,然后重放一下。為了構(gòu)造這個請求,我們在原來網(wǎng)絡(luò)請求框架上處理流程中添加一個方法,用以打印請求URL和請求參數(shù)。如果請求方式是GET,不妨直接把URL和參數(shù)拼接好,然后再打印。如果是post請求,相對麻煩一些,寫一個html文件,用打印出來的URL和請求參數(shù)構(gòu)建一個form表單,通過form表單,在瀏覽器中請求。

OK,現(xiàn)在你手里面有一個完整的URL或表單請求,如果后端同學(xué)不肯彎腰撿肥皂,你就可以把東西丟給他讓他自己反省。

下面貼一下我用的表單:

<html>
<head>
    <meta charset='utf-8' />
    <meta name="viewport" content="width=device-width,minimum-scale=1.0,maximum-scale=1.0,user-scalable=no" />
    <title>打臉神器</title>
    <style type="text/css">
    input{
      margin: 8px auto 8px 8px;
    }
    </style>
</head>

<body>
    <form action="http://www.baidu.com/s" method="post">
        <span>word</span><input type="text" name="word"><br>
        <input type="submit" value="提交">
    </form>
</body>

2. 客戶端到底有沒有傳某個字段到服務(wù)端?

有的時候自己都不確定調(diào)用接口的時候有沒有把要求的字段傳過去,這個時候完全看服務(wù)端大爺?shù)哪樕珕??怎么可能?他們還沒那么拽(不過話又說回來,當(dāng)你沒有更好的辦法的時候還是態(tài)度好一點,跟人家好好配合)。方法也就一句話:"在服務(wù)端檢查一下客戶端的傳參"??煜掳嗔?,就不瞎扯別的了,趕緊寫完收工。

直接講我的做法,我在自己電腦上搭了一個PHP環(huán)境(PHP簡單好用,你值得擁有),然后把請求的URL重定向到本地的PHP頁面。比如我的電腦局域網(wǎng)ip是 192.168.1.66,PHP服務(wù)器運行在80端口,PHP頁面是index.php,客戶端別的都不用變,只用把請求URL改成http://192.168.1.66:80/demo/index.php 就可以在PHP服務(wù)器上接收到請求了。檢驗字段什么的,都不在話下。

這句神奇的PHP代碼就是echo $_REQUEST['參數(shù)名稱']。

3. 服務(wù)端要求傳數(shù)組,可是Http請求里面的數(shù)組是個什么鬼?

這個內(nèi)容其實可以算是2的一個引申。服務(wù)端說讓客戶端傳數(shù)組,前端同學(xué)一臉的懵比,What 數(shù)組???懵歸懵,我還是有一點思路的。像2一樣,我把請求重新定向到本地PHP頁面,然后不斷的改客戶端代碼,根據(jù)PHP的接收情況,不斷嘗試終于被我發(fā)現(xiàn)了真相!其實所謂的數(shù)組是一偽名詞,客戶端傳過去的數(shù)據(jù)是這個樣子的:

array[0]=value0&array[1]=value1

看完之后你可能也有點懵,直接上代碼看看我是怎么處理的:

Map<String,String> params = new HashMap<>();
String array[] = new String[]{"value0","value1"};
for(int i =0;i<array.length;i++){
    params.put(String.format("array[%d]",i),array[i]);
}

這樣一來,服務(wù)端就能按照解析數(shù)組來解析客戶端的請求參數(shù)了。
上面介紹的方法并不局限于上面所提到的問題,開發(fā)過程中遇到的很多問題都可以用上面的方法來解決。
突然想到,如果使用fiddler抓包工具。。。難道我是拿著lowB技術(shù)在開車?不行,我得去研究一下!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,534評論 19 139
  • 點擊查看原文 Web SDK 開發(fā)手冊 SDK 概述 網(wǎng)易云信 SDK 為 Web 應(yīng)用提供一個完善的 IM 系統(tǒng)...
    layjoy閱讀 14,299評論 0 15
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,605評論 0 20
  • 第一章 Nginx簡介 Nginx是什么 沒有聽過Nginx?那么一定聽過它的“同行”Apache吧!Ngi...
    JokerW閱讀 33,018評論 24 1,002
  • 沒到愚人節(jié),都會看到朋友圈和微博各種懷念哥哥的文字。其實我了解張國榮,是從大學(xué)開始的。大學(xué)里有的同學(xué)特別喜歡...
    會寫字的小羊駝閱讀 194評論 0 2

友情鏈接更多精彩內(nèi)容