最美情侣中文字幕电影,在线麻豆精品传媒,在线网站高清黄,久久黄色视频

歡迎光臨散文網(wǎng) 會(huì)員登陸 & 注冊(cè)

Amadeus復(fù)刻計(jì)劃(App篇 六)

2022-10-15 21:50 作者:寂滅光-  | 我要投稿

前言:嘗試性的加入了http請(qǐng)求模塊,暫時(shí)還未想到放在哪里,但遇到的一些問題煩惱了許久,有記錄下來的必要。

Q1: java如何發(fā)送http請(qǐng)求(get,post)?

A1:網(wǎng)上查到的參考資料顯示,被廣泛使用的方法有java官方的HttpURLConnection與第三方庫Okhttp,嘗試了下前者,比較傾向于底層,沒有進(jìn)行封裝,使用起來比較麻煩,因?yàn)楣P者并沒有在java領(lǐng)域深究的打算,因此決定使用okhttp(需要使用gradle安裝依賴)


Q2:Okhttp在java中的大致使用流程是什么?

A2:okhttp發(fā)送post請(qǐng)求的流程大致如下(get很簡(jiǎn)單就不做贅述了)

????1.????創(chuàng)建OkHttpClient對(duì)象(OkHttpClient client = new OkHttpClient();

????2.????構(gòu)造FormBody用以傳輸表單數(shù)據(jù)FormBody payload = new FormBody.Builder()

? ? ? ?.add("action", "FY_BY_REALTlME")
? ? ? ?.build();其中add函數(shù)傳表單的鍵值對(duì)

????3.????構(gòu)建Request對(duì)象,將FormBody作為Post方法的參數(shù)傳入(Request request = new Request.Builder()
? ? ? ?.header("Referer", "https://fanyi.youdao.com/")
? ? ? ?.post(payload)
? ? ? ?.url(url)
? ? ? ?.build();其中header函數(shù)傳請(qǐng)求頭相關(guān)數(shù)據(jù),同樣是鍵值對(duì)形式

????4.? ? 封裝成Call并執(zhí)行(Call call = client.newCall(request);Response response = call.execute();返回值為Response類型

Q3:okhttp返回的結(jié)果是什么形式?該怎么處理成需要的數(shù)據(jù)類型?

A3:okhttp的請(qǐng)求結(jié)果以Response類型數(shù)據(jù)返回,說實(shí)話筆者對(duì)其也不是很了解,但摸索得出的結(jié)論是,response.body 屬性返回了我們所需要的響應(yīng)數(shù)據(jù)(即F12中拿到的響應(yīng)

根據(jù)響應(yīng)結(jié)果的不同,可以使用response.body().string();獲取字符串?dāng)?shù)據(jù),或是response.body().byteStream();獲取二進(jìn)制流數(shù)據(jù),拿到數(shù)據(jù)后對(duì)其怎么處理就與okhttp沒有關(guān)系了,這里不多做記錄。


Q3:請(qǐng)求負(fù)載(payload)與表單數(shù)據(jù)(formdata)在okhttp中有什么區(qū)別?

A3:這個(gè)是一個(gè)很令人困惑的問題,因?yàn)樵趐ython的requests庫中似乎對(duì)其進(jìn)行了處理,在此之前筆者從未意識(shí)到這兩個(gè)竟然是不一樣的。于是在java中就翻了車,返回?cái)?shù)據(jù)和預(yù)期不符。

在翻查了很久后(主要是不知道該如何描述問題),暫時(shí)的結(jié)論是payload是以json的數(shù)據(jù)形式發(fā)送給服務(wù)器的。因此不能使用A2中構(gòu)建FormBody的形式傳輸(其實(shí)FormBody這個(gè)名字也提示了哇……),直接擺出結(jié)論代碼:

????MediaType mediaType=MediaType.Companion.parse("application/json;charset=utf-8")

RequestBody requestBody=RequestBody.Companion.create(String.valueOf(json),mediaType);

其中第一行是固定的,似乎是指明將要傳輸?shù)臄?shù)據(jù)為json類型

第二行中的RequestBody是FormBody的父類,即formbody只是其中一個(gè)特殊情況,需要注意的是,構(gòu)建RequestBody時(shí)需要將構(gòu)造的json數(shù)據(jù)轉(zhuǎn)為字符串(感覺很離譜,但它確實(shí)是這么干的),之后的操作就和傳form一樣了。

ps:感覺思路卡殼了(畢竟之前都是復(fù)刻嘛,沒啥創(chuàng)新)


參考資料:

https://cloud.tencent.com/developer/article/1910477

https://blog.csdn.net/qq_19306415/article/details/102954712


交流群:

723240586


Amadeus復(fù)刻計(jì)劃(App篇 六)的評(píng)論 (共 條)

分享到微博請(qǐng)遵守國家法律
关岭| 临猗县| 菏泽市| 峨眉山市| 栾城县| 西藏| 金沙县| 扬州市| 白朗县| 新乐市| 自贡市| 潜江市| 梨树县| 汕头市| 麻栗坡县| 原阳县| 舞钢市| 昌邑市| 双峰县| 奉新县| 遂溪县| 乌审旗| 常熟市| 榆中县| 中西区| 长丰县| 陇南市| 富锦市| 南雄市| 和林格尔县| 马山县| 花莲县| 苍溪县| 镇雄县| 白河县| 阳城县| 潞城市| 西安市| 紫金县| 深泽县| 久治县|