中文亚洲精品无码_熟女乱子伦免费_人人超碰人人爱国产_亚洲熟妇女综合网

當(dāng)前位置: 首頁 > news >正文

門戶網(wǎng)站類型北京疫情消息1小時(shí)前

門戶網(wǎng)站類型,北京疫情消息1小時(shí)前,thinkphp做的網(wǎng)站源碼,未來做啥網(wǎng)站能致富目錄 一、基本介紹 二、基本使用 2.1、package導(dǎo)入 2.2、同步請(qǐng)求 2.3、異步請(qǐng)求 2.4、post請(qǐng)求 2.5、post發(fā)送json信息 2.6、post發(fā)送文件信息 2.7、post發(fā)送多種請(qǐng)求信息 三、小結(jié) 一、基本介紹 在之前的Java網(wǎng)絡(luò)編程(一)中已經(jīng)介紹了網(wǎng)絡(luò)編…

目錄

一、基本介紹

二、基本使用

2.1、package導(dǎo)入

2.2、同步請(qǐng)求

2.3、異步請(qǐng)求

2.4、post請(qǐng)求

2.5、post發(fā)送json信息

2.6、post發(fā)送文件信息

2.7、post發(fā)送多種請(qǐng)求信息

三、小結(jié)


一、基本介紹

在之前的Java網(wǎng)絡(luò)編程(一)中已經(jīng)介紹了網(wǎng)絡(luò)編程里最基本的概念,即套接字socket。然而socket雖然基礎(chǔ),但使用起來頗為麻煩、復(fù)雜,因此在開發(fā)網(wǎng)絡(luò)功能的過程中,一般會(huì)使用其它第三方庫進(jìn)行網(wǎng)絡(luò)請(qǐng)求。而本文將要介紹的就是一個(gè)比較經(jīng)典的Java網(wǎng)絡(luò)請(qǐng)求庫--OkHttp。

Java OkHttp是一個(gè)基于Java語言開發(fā)的開源庫,可以用于HTTP和HTTP/2客戶端請(qǐng)求。該庫提供的API簡單清晰,功能豐富,能夠極大簡化開發(fā)者請(qǐng)求HTTP時(shí)的操作,因此被廣泛地應(yīng)用于Android應(yīng)用和java程序中。

二、基本使用

2.1、package導(dǎo)入

如果是Android的gradel項(xiàng)目,那么在build.gradle中添加以下依賴語句

implementation("com.squareup.okhttp3:okhttp:4.9.0")

如果是maven項(xiàng)目,那么在pom文件中添加以下依賴即可

<dependency><groupId>com.squareup.okhttp3</groupId><artifactId>okhttp</artifactId><version>4.9.0</version></dependency></dependencies>

想要最新版本或者下載本地jar包的可以去官網(wǎng)上找,地址如下

https://mvnrepository.com/artifact/com.squareup.okhttp3/okhttp????????

2.2、同步請(qǐng)求

首先創(chuàng)建一個(gè)OkHttpClient,然后根據(jù)url構(gòu)建最基本的request請(qǐng)求,再通過client對(duì)象和request對(duì)象來構(gòu)造Call對(duì)象即可使用call對(duì)象的execute方法開始網(wǎng)絡(luò)請(qǐng)求。

要注意的是,網(wǎng)絡(luò)請(qǐng)求可能是一個(gè)耗時(shí)較長的過程,一般不允許在主線程中開啟網(wǎng)絡(luò)請(qǐng)求。而call對(duì)象的execute方法則是一個(gè)同步請(qǐng)求的方法,因此需要?jiǎng)?chuàng)建一個(gè)子線程來執(zhí)行該方法,具體代碼如下:

public void startGet() {String url = "https://wwww.baidu.com";OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).get().build();final Call call = client.newCall(request);new Thread(new Runnable() {@Overridepublic void run() {try {final Response response = call.execute();System.out.println("Request result:");System.out.println(response.body().string());} catch (IOException e) {e.printStackTrace();}}}).start();call.enqueue(callback);}

2.3、異步請(qǐng)求

每次請(qǐng)求都需要我們手動(dòng)new一個(gè)Thread對(duì)象的話太過麻煩,因此OkHttp也為開發(fā)者封裝了異步請(qǐng)求的方法enqueue,調(diào)用該方法時(shí)不需要另開子線程調(diào)用,直接在主線程中執(zhí)行即可。

使用異步請(qǐng)求之前,和同步請(qǐng)求一樣,也需要先構(gòu)建好client、request和call對(duì)象,此外還需要實(shí)現(xiàn)Callback接口,該接口對(duì)象將會(huì)在調(diào)用enqueue方法時(shí)作為參數(shù)傳入,其中的onFailure和onResponse方法則分別在請(qǐng)求失敗和請(qǐng)求成功時(shí)被執(zhí)行。

private Callback callback = new Callback() {@Overridepublic void onFailure(Call arg0, IOException arg1) {System.out.println("Request failed");}@Overridepublic void onResponse(Call arg0, Response response) throws IOException {System.out.println("Request result:");System.out.println(response.body().string());}};
public void aysncGet() {String url = "https://wwww.baidu.com";OkHttpClient client = new OkHttpClient();Request request = new Request.Builder().url(url).get().build();Call call = client.newCall(request);call.enqueue(callback);}

2.4、post請(qǐng)求

之前介紹的兩個(gè)都是簡單的get請(qǐng)求,實(shí)際應(yīng)用過程中還有一個(gè)非常重要的post請(qǐng)求。使用?post請(qǐng)求相比get請(qǐng)求,其實(shí)就是多了一個(gè)RequstBody對(duì)象來攜帶我們要發(fā)送給網(wǎng)絡(luò)服務(wù)器的數(shù)據(jù)。一個(gè)最基本的攜帶表單form信息的post請(qǐng)求示例如下:

public void postForm() {String url = "https://wwww.baidu.com";OkHttpClient client = new OkHttpClient();RequestBody body = new FormBody.Builder().add("username", "name").add("password", "666").build();Request request = new Request.Builder().url(url).post(body).build();Call call = client.newCall(request);call.enqueue(callback);}

2.5、post發(fā)送json信息

除了表單信息之外,json文件也是網(wǎng)絡(luò)請(qǐng)求中常見的格式,上傳json信息的示例如下:

public void postJson() {String url = "https://wwww.baidu.com";String json = "{\"username\":\"name\",\"password\":\"666\"}";OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("application/json");RequestBody body = RequestBody.create(json, mediaType);Request request = new Request.Builder().url(url).post(body).build();Call call = client.newCall(request);call.enqueue(callback);}

不難看出,相較于form信息,發(fā)送json信息時(shí)其實(shí)就是RequstBody對(duì)象有所改變?。在解析json數(shù)據(jù)時(shí)利用到了MediaType對(duì)象,MediaType指的是要傳遞的數(shù)據(jù)的MIME類型,是用來描述請(qǐng)求/響應(yīng) body 的內(nèi)容類型。關(guān)于MIME類型具體包含哪些,它們的表達(dá)形式又是什么,可以網(wǎng)上查閱其它資料,筆者參考的是該鏈接中的介紹:MIME 參考手冊(cè)

2.6、post發(fā)送文件信息

發(fā)送文件信息和發(fā)送json信息類似,也是利用不同的MediaType對(duì)象解析完成file對(duì)象后,將其放入RequestBody中,具體示例代碼如下:

public void postFile() {String url = "https://wwww.baidu.com";File file = new File("./test.jpg");OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("image/jpeg");RequestBody body = RequestBody.create(file, mediaType);Request request = new Request.Builder().url(url).post(body).build();Call call = client.newCall(request);call.enqueue(callback);}

2.7、post發(fā)送多種請(qǐng)求信息

有時(shí)實(shí)際應(yīng)用還需要我們同時(shí)發(fā)送多種請(qǐng)求信息,此時(shí)一般會(huì)利用MultipartBody對(duì)象幫助我們將多種對(duì)象信息組合起來。代碼如下:

public void postMult() {String url = "https://wwww.baidu.com";String json = "{\"username\":\"name\",\"password\":\"666\"}";File file = new File("./test.jpg");OkHttpClient client = new OkHttpClient();MediaType mediaType = MediaType.parse("image/jpeg");RequestBody body = new MultipartBody.Builder().setType(MultipartBody.FORM).addFormDataPart("username", "name").addFormDataPart("password", "666").addPart(RequestBody.create(json, MediaType.parse("application/json"))).addFormDataPart("image", "test.png", RequestBody.create(file, mediaType)).build();Request request = new Request.Builder().url(url).post(body).build();Call call = client.newCall(request);call.enqueue(callback);}

三、小結(jié)

本文介紹了OkHttp的基本功能和常用API,掌握以上請(qǐng)求的使用基本可以滿足大部分的網(wǎng)絡(luò)請(qǐng)求使用場景。

OkHttp返回的response中保存了返回結(jié)果,調(diào)用response.body().string()之后可以得到一份html文件內(nèi)容,而要進(jìn)一步解析該內(nèi)容以獲取其中的有效信息則不是OkHttp要做的了。Java語言中,一般推薦DOM庫或者Jsoul庫來對(duì)網(wǎng)絡(luò)請(qǐng)求返回的信息做進(jìn)一步的處理,感興趣的讀者可以自行嘗試。

筆者萌新一枚,如有錯(cuò)漏之處還望指正。

本文主要參考了以下文章:

OkHttp的完整指南 - 掘金

http://www.risenshineclean.com/news/9604.html

相關(guān)文章:

  • 手機(jī)網(wǎng)站制作費(fèi)用多少seo廠商
  • 黃驊市海邊深圳優(yōu)化排名公司
  • 網(wǎng)站制作服務(wù)公司婚戀網(wǎng)站排名前三
  • 怎樣做營銷型網(wǎng)站推廣ppt抖音seo軟件
  • 網(wǎng)頁設(shè)計(jì)和網(wǎng)站開發(fā)有什么區(qū)別百度競價(jià)是什么工作
  • 如何給一個(gè)網(wǎng)站做定時(shí)的更新深圳網(wǎng)站制作推廣
  • 國內(nèi)永久在線免費(fèi)建站百度網(wǎng)盤資源搜索引擎入口
  • 深圳和海楓建設(shè)集團(tuán)有限公司網(wǎng)站百度推廣關(guān)鍵詞
  • node做網(wǎng)站優(yōu)勢(shì)東莞發(fā)布最新通告
  • 生產(chǎn)做網(wǎng)站表帶的制造廠家seo整站優(yōu)化系統(tǒng)
  • 專業(yè)網(wǎng)站建設(shè)模板怎么在百度推廣自己的網(wǎng)站
  • 購物網(wǎng)站的圖片輪播怎么做短鏈接在線生成官網(wǎng)
  • 找別人做公司網(wǎng)站第一步做什么最新網(wǎng)站推廣方法
  • 做網(wǎng)站哪些公司好百度分析
  • 常德網(wǎng)站建設(shè)案例教程360優(yōu)化大師app
  • 自己做網(wǎng)站 為什么出現(xiàn)403營銷渠道名詞解釋
  • 使用他人注冊(cè)商標(biāo)做網(wǎng)站湖南網(wǎng)站托管
  • 醫(yī)療器械做網(wǎng)站到哪里先備案網(wǎng)絡(luò)營銷方法
  • 黔東網(wǎng)站建設(shè)什么網(wǎng)站都能打開的瀏覽器
  • 聊天網(wǎng)站制作教程武漢seo廣告推廣
  • 淮北網(wǎng)站建設(shè)制作衡陽網(wǎng)站優(yōu)化公司
  • 旅游網(wǎng)站模板源碼媒體發(fā)稿網(wǎng)
  • 最新中國b2b網(wǎng)站排名南寧seo做法哪家好
  • 獨(dú)立網(wǎng)站怎么做seo當(dāng)陽seo外包
  • php 開源企業(yè)網(wǎng)站百度網(wǎng)盤網(wǎng)頁版入口
  • 懷化 網(wǎng)站建設(shè)2345網(wǎng)址導(dǎo)航設(shè)為主頁
  • 合肥萬戶網(wǎng)絡(luò)科技有限公司搜索引擎優(yōu)化的主要工作
  • 上虞網(wǎng)站設(shè)計(jì)城關(guān)網(wǎng)站seo
  • 沈陽做網(wǎng)站公司重慶seo排名
  • 國內(nèi)課程網(wǎng)站建設(shè)現(xiàn)狀永久免費(fèi)低代碼開發(fā)平臺(tái)