精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

面試官:請用Java實現一個HTTP請求

開發 前端
今天將介紹一種在 Java 中執行 HTTP 請求的方法 -- 通過使用 Java 內置的 HttpUrlConnection 類實現。

大家好,我是指北君。

最近面試的時候,竟然有面試官提出這樣的要求:請用Java實現一個HTTP請求!當然不能慫! 雄起!!!

今天將介紹一種在 Java 中執行 HTTP 請求的方法 -- 通過使用 Java 內置的 HttpUrlConnection 類實現。

從 JDK 11 開始,Java 為執行 HTTP 請求提供了一個新的 API,它是用來替代 HttpUrlConnection 的,即HttpClient API。

HttpUrlConnection

HttpUrlConnection 類允許我們執行基本的 HTTP 請求,而無需使用任何額外的庫。我們需要的所有類都是 java.net 包的一部分。

使用這種方法的缺點是,代碼可能比其他的HTTP庫更繁瑣,而且它不提供更高級的功能,如添加頭文件或認證的專用方法。

創建一個請求

我們可以使用 URL 類的 openConnection() 方法創建一個 HttpUrlConnection 實例。注意,這個方法只是創建一個連接對象,但還沒有建立連接。

HttpUrlConnection 類通過將 requestMethod 屬性設置為get, post, head, options, put, delete, trace其中一個值。

讓我們使用GET方法創建一個與給定URL的連接:

URL url = new URL("https://www.javanorth.cn");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestMethod("GET");

添加請求參數

如果我們想向一個請求添加參數,我們必須將 doOutput 屬性設置為 true,然后向 HttpUrlConnection 實例的OutputStream 寫一個類似 param1=value&m2=value 的字符串。

Map<String, String> parameters = new HashMap<>();
parameters.put("param1", "val");

con.setDoOutput(true);
DataOutputStream out = new DataOutputStream(con.getOutputStream());
out.writeBytes(ParameterStringBuilder.getParamsString(parameters));
out.flush();
out.close();

為了方便參數Map的轉換,我們編寫了一個名為ParameterStringBuilder的實用類,其中包含一個靜態方法getParamsString(),可以將Map轉換為所需格式的字符串。

public class ParameterStringBuilder {
public static String getParamsString(Map<String, String> params)
throws UnsupportedEncodingException{
StringBuilder result = new StringBuilder();

for (Map.Entry<String, String> entry : params.entrySet()) {
result.append(URLEncoder.encode(entry.getKey(), "UTF-8"));
result.append("=");
result.append(URLEncoder.encode(entry.getValue(), "UTF-8"));
result.append("&");
}

String resultString = result.toString();
return resultString.length() > 0 ? resultString.substring(0, resultString.length() - 1) : resultString;
}
}

設置請求頭信息

通過使用 setRequestProperty() 方法可以實現在請求中添加頭信息。

con.setRequestProperty("Content-Type", "application/json");

要從一個連接中讀取一個頭的值,我們可以使用 getHeaderField() 方法。

String contentType = con.getHeaderField("Content-Type");

配置超時

HttpUrlConnection 類允許設置連接和讀取超時。這些值定義了等待與服務器的連接建立或數據可被讀取的時間間隔。

為了設置超時值,我們可以使用 setConnectTimeout()和 setReadTimeout()方法。

con.setConnectTimeout(5000);
con.setReadTimeout(5000);

在這個例子中,我們把兩個超時值都設為5秒。

處理Cookie

java.net 包包含了便于處理 cookie 的類,如 CookieManager 和 HttpCookie。

首先,為了從響應中讀取 cookie,我們可以檢索 Set-Cookie 頭的值,并將其解析為一個 HttpCookie 對象的列表。

String cookiesHeader = con.getHeaderField("Set-Cookie");
List<HttpCookie> cookies = HttpCookie.parse(cookiesHeader);

接下來,我們將把cookie添加到cookieStore。

cookies.forEach(cookie -> cookieManager.getCookieStore().add(null, 
cookie));

讓我們檢查一下是否有一個叫做 username 的 cookie,如果沒有,我們將把它添加到cookieStore,其值為 "javanorth"。

Optional<HttpCookie> usernameCookie = cookies.stream().findAny().filter(cookie -> cookie.getName().equals("username"));
if (usernameCookie == null) {
cookieManager.getCookieStore().add(null, new HttpCookie("username", "javanorth"));
}

最后,為了在請求中加入 cookie,我們需要在關閉和重新打開連接后設置 Cookie 頭。

con.disconnect();
con = (HttpURLConnection) url.openConnection();

con.setRequestProperty("Cookie", StringUtils.join(cookieManager.getCookieStore().getCookies(), ";"));

處理重定向

我們可以通過使用參數為 true 或 false 的 setInstanceFollowRedirects() 方法,為一個特定的連接啟用或禁用自動跟蹤重定向。

con.setInstanceFollowRedirects(false);

也可以啟用或禁用所有連接的自動重定向。

HttpUrlConnection.setFollowRedirects(false);

默認情況下,該行為是啟用的。

當一個請求返回狀態代碼 301 或 302,表示重定向時,我們可以檢索位置頭并創建一個新的請求到新的URL。

if (status == HttpURLConnection.HTTP_MOVED_TEMP || status == HttpURLConnection.HTTP_MOVED_PERM) {
String location = con.getHeaderField("Location");
URL newUrl = new URL(location);
con = (HttpURLConnection) newUrl.openConnection();
}

讀取響應

讀取請求的響應可以通過解析 HttpUrlConnection 實例的 InputStream 來完成。

為了執行請求,我們可以使用 getResponseCode()、connect()、getInputStream() 或 getOutputStream() 方法。

int status = con.getResponseCode();

最后,讓我們讀一下請求的響應,并把它放在一個內容字符串中。

BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer content = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
content.append(inputLine);
}
in.close();

要關閉連接,我們可以使用 disconnect() 方法。

con.disconnect();

在失敗的請求中讀取響應

如果請求失敗了,我們從 HttpUrlConnection 實例的 InputStream 讀取是讀取不到數據的。我們可以從 HttpUrlConnection.getErrorStream() 提供的流讀取。

我們可以通過比較 HTTP 狀態碼來決定使用哪個 InputStream。

int status = con.getResponseCode();

Reader streamReader = null;

if (status > 299) {
streamReader = new InputStreamReader(con.getErrorStream());
} else {
streamReader = new InputStreamReader(con.getInputStream());
}

最后,我們可以用與上一節相同的方式讀取 streamReader。

總結在這篇文章中,我們展示了如何使用 HttpUrlConnection 類來執行HTTP請求。

責任編輯:武曉燕 來源: Java技術指北
相關推薦

2023-07-31 08:26:09

2025-10-20 04:00:00

2021-09-28 13:42:55

Chrome Devwebsocket網絡協議

2025-11-11 09:25:19

2024-05-28 10:14:31

JavaScrip模板引擎

2021-01-18 05:13:04

TomcatHttp

2021-05-27 05:37:10

HTTP請求頭瀏覽器

2021-06-09 07:55:19

NodeEventEmitte驅動

2020-05-13 14:35:47

HashMap面試官Java

2021-05-19 08:17:35

秒殺場景高并發

2022-01-10 11:04:41

單鏈表面試編程

2022-08-18 20:02:04

JSLRU緩存

2020-06-22 07:47:46

提交面試官訂單

2019-12-02 10:51:11

Redis存儲系統

2024-04-09 08:39:16

本地緩存開發線程安全

2017-03-16 15:27:10

面試官測試技術

2021-05-12 08:20:53

開發

2025-09-19 09:57:46

2020-04-20 08:35:48

HTTP HTTPS網絡協議

2024-02-20 14:10:55

系統緩存冗余
點贊
收藏

51CTO技術棧公眾號

激情小说一区| av中文字幕在线观看第一页| 精品中文字幕一区二区小辣椒| yw.139尤物在线精品视频| 成人免费播放视频| 人人草在线视频| 中文字幕日韩一区| 国内一区二区三区在线视频| 亚洲一区二区影视| 亚洲国产专区校园欧美| 最近2019中文字幕第三页视频 | 青草在线视频在线观看| 97精品国产露脸对白| 成人国产精品色哟哟| 中文字幕第15页| 在线一区免费| 一区二区福利视频| 色婷婷精品久久二区二区密| 性欧美video另类hd尤物| 午夜精品久久久久影视| 在线日韩av永久免费观看| 深夜福利在线看| 国产美女一区二区三区| 国产精品大片wwwwww| 青青草免费av| 色狮一区二区三区四区视频| 亚洲欧美国产精品专区久久| 又色又爽又黄18网站| 四虎国产精品免费久久5151| 日本大香伊一区二区三区| 丝袜人妻一区二区三区| 国产欧美久久久久久久久| 国产亚洲婷婷免费| 国产在线一区二区三区播放| www.日日夜夜| 国产麻豆91精品| 国产精品普通话| 9i精品福利一区二区三区| 亚洲国产婷婷| 欧美多人爱爱视频网站| 午夜免费激情视频| 91精品国产91久久久久久密臀 | 精品视频一区二区三区免费| 精品人妻一区二区三区四区在线| 色呦呦在线看| 一区二区欧美在线观看| 亚洲av综合色区| 二区在线播放| 亚洲精品福利视频网站| 亚洲一区三区视频在线观看 | 国产精品青草综合久久久久99| 久久久久久艹| 日本ー区在线视频| 久久蜜桃av一区精品变态类天堂| 精品一区2区三区| 亚州精品国产精品乱码不99按摩| 99久久伊人久久99| 好吊色欧美一区二区三区四区| 欧美特级特黄aaaaaa在线看| 成人精品视频一区二区三区| 国产三级精品在线不卡| 亚洲色图欧美视频| 2023国产一二三区日本精品2022| 久久精品日产第一区二区三区乱码| 香港一级纯黄大片| 91丨porny丨蝌蚪视频| 麻豆91蜜桃| 成人在线免费看| 18成人在线视频| www.69av| 岛国av在线播放| 色中色一区二区| 免费看污黄网站| 国产一区二区三区亚洲综合| 日韩欧美精品在线| 精品熟女一区二区三区| 伊人久久大香线蕉av不卡| 国产一区二区三区高清在线观看| 国产精品麻豆一区| 欧美高清一区| 5566成人精品视频免费| 亚洲精品国产无码| 国产精品1区2区3区在线观看| 草莓视频一区| 国产综合在线观看| 亚洲人123区| 成人在线观看你懂的| 吞精囗交69激情欧美| 欧美日韩中文国产| 欧美夫妇交换xxx| 欧洲杯什么时候开赛| 精品久久国产精品| 亚洲伊人成人网| 精品一区二区在线视频| 精品一区二区三区视频日产| 91精品国产91久久久久游泳池| 亚洲激情欧美激情| 久久精品99国产| 欧美专区一区| 国产亚洲视频中文字幕视频| 欧美极品视频在线观看| 久久美女性网| 91精品国产综合久久久久久久久| 日批视频在线播放| 国产精品成人午夜| 黄色一级视频片| 成人黄色理论片| 亚洲精品一区在线观看香蕉| 欧美成人黄色网| 免费人成在线不卡| 精品综合久久久| av在线免费网址| 欧美综合久久久| 草草地址线路①屁屁影院成人| 天天综合网91| 国产成人一区三区| 天天摸天天碰天天爽天天弄| 亚洲色图在线看| 精品久久久久久中文字幕2017| 成人av动漫| 久久夜色精品亚洲噜噜国产mv| 激情视频网站在线观看| av一二三不卡影片| 在线观看17c| 欧美成人福利| 亚洲天堂日韩电影| xxxx.国产| av中文一区二区三区| 超碰10000| 麻豆精品一区| 另类天堂视频在线观看| 中文字幕人妻一区二区三区视频 | 欧美性受xxxx黑人| 国产精品尤物| 国内精品视频在线播放| av中文资源在线资源免费观看| 日韩免费成人网| 成人免费视频国产免费观看| 精品在线播放午夜| 在线观看成人一级片| 国产极品嫩模在线观看91精品| 亚洲午夜激情免费视频| 亚洲第一网站在线观看| 26uuu国产日韩综合| ww国产内射精品后入国产| 99re8这里有精品热视频免费| 欧美成人性色生活仑片| 999av视频| 亚洲精品成a人| 成人在线观看一区二区| 狠狠综合久久| 国产视频99| 精品国产第一福利网站| 亚洲天堂日韩电影| 亚洲无码久久久久| 国产精品看片你懂得| av免费一区二区| 五月开心六月丁香综合色啪| 亚洲淫片在线视频| 黄色大片在线| 日韩精品一二三四区| 国产精品视频一区在线观看| 国产性做久久久久久| jizz欧美激情18| 99久久影视| 91在线看网站| 国产伦理精品| 国产亚洲精品va在线观看| 伊人网中文字幕| 玉米视频成人免费看| 日韩综合第一页| 玖玖视频精品| 精品少妇人妻av一区二区| 日韩精品久久久久久久软件91| 久久久久五月天| 亚洲人成色777777精品音频| 欧美在线免费播放| 亚洲精品卡一卡二| 成人在线一区二区三区| 国产一区亚洲二区三区| 日韩综合一区| 高清一区二区三区视频| 婷婷激情一区| 欧美成人合集magnet| 污视频在线免费| 欧美日韩在线一区二区| 久久久久久蜜桃| 国产欧美日韩久久| 国产精品99久久久精品无码| 久久综合亚州| 欧妇女乱妇女乱视频| 你懂的一区二区三区| 91久久久久久久| 色网在线免费观看| 久久久国产一区二区| 五月激情丁香婷婷| 91精品欧美久久久久久动漫| 九九热在线视频播放| 国产精品美女久久福利网站| 日本三级日本三级日本三级极| 老鸭窝一区二区久久精品| 人妻少妇精品无码专区二区| 久久精品国产大片免费观看| 黄色国产精品一区二区三区| 91九色成人| 国产999精品视频| 成人福利电影| 久久久国产视频| 成人欧美亚洲| 亚洲精品不卡在线| 国产精品主播一区二区| 一本一道综合狠狠老| 久草视频在线资源| 国产精品久久三区| 91网站免费视频| kk眼镜猥琐国模调教系列一区二区| 超碰在线公开97| 天堂影院一区二区| 国产精品专区在线| 综合天堂久久久久久久| 亚洲午夜精品福利| 精品一区欧美| 久久99精品久久久久久水蜜桃| 国产激情精品一区二区三区| 国产精品久久久久久中文字| 正在播放日韩精品| 51久久精品夜色国产麻豆| 国产经典三级在线| 欧美精品亚州精品| 99热国产在线中文| 久久天天躁狠狠躁老女人| 在线毛片网站| www.欧美精品一二三区| 成人免费在线观看| 一区二区三区回区在观看免费视频| 青春有你2免费观看完整版在线播放高清 | 中文字幕自拍vr一区二区三区| 日韩在线无毛| 亚洲免费福利视频| 视频国产一区二区三区| 日韩av在线导航| 五月婷婷在线观看视频| 亚洲国产欧美一区二区丝袜黑人| 国精产品乱码一区一区三区四区| 日韩欧美国产精品一区| www.97av| 亚洲风情亚aⅴ在线发布| 亚洲国产av一区二区| 欧美va亚洲va在线观看蝴蝶网| 亚洲高清视频网站| 亚洲高清久久久久久| 色噜噜一区二区三区| 亚洲精品一区中文字幕乱码| 四虎影院在线播放| 亚洲欧美综合区自拍另类| 精品亚洲综合| 丝袜一区二区三区| 黄色网在线免费看| 亚州视频一区二区三区| 91麻豆产精品久久久久久| 性欧美丰满熟妇xxxx性久久久| hitomi一区二区三区精品| 免费黄色三级网站| 久久久噜噜噜久久人人看| 人妻精品久久久久中文| 国产精品欧美精品| 顶臀精品视频www| 亚洲成a天堂v人片| 中文字幕视频网站| 欧美午夜精品一区二区三区| 国产乱码一区二区| 亚洲福利在线看| 黄色软件在线| 久久久精品免费视频| 久久免费电影| 国产成人鲁鲁免费视频a| 欧美特黄色片| 国产精品久久久久久久天堂第1集 国产精品久久久久久久免费大片 国产精品久久久久久久久婷婷 | 欧美黄片一区二区三区| 亚洲午夜久久久久久久久电影院| 亚洲欧美综合另类| 欧美日韩视频在线第一区| av男人天堂网| 亚洲欧美国产精品va在线观看| 精品黄色免费中文电影在线播放| 久久久视频免费观看| 日韩在线短视频| 国产精品免费一区二区三区四区 | 91影院在线观看| 精品丰满少妇一区二区三区| 亚洲一区二区三区视频在线| 波多野结衣视频观看| 精品国产亚洲一区二区三区在线观看| 邻居大乳一区二区三区| 久久艹在线视频| 裤袜国产欧美精品一区| 97人人模人人爽人人喊38tv| 九九久久电影| 大荫蒂性生交片| 久色婷婷小香蕉久久| 精品中文字幕在线播放| 国产精品久久毛片av大全日韩| 日韩av一二三区| 欧美精品三级在线观看| 清纯唯美亚洲色图| 欧美第一页在线| 亚洲三级电影| 欧美日韩在线一区二区三区| 国产一区欧美| 成人综合久久网| 久久久www免费人成精品| 国产一级久久久| 在线播放中文字幕一区| 国产高清一区在线观看| 91精品国产乱码久久久久久蜜臀 | 美女视频久久| 狠狠色丁香久久综合频道 | 成人一区二区视频| 五月天婷婷色综合| 欧美日韩视频在线第一区| 美州a亚洲一视本频v色道| 久久久日本电影| 在线精品视频一区| 精品一区二区成人免费视频| 免费视频一区二区| 免费看日本黄色片| 色88888久久久久久影院野外| 国产成人麻豆精品午夜在线| 伊人av综合网| 欧美xxx网站| 欧美日韩一区二区三区在线视频 | 国产大片在线免费观看| 欧美一级在线亚洲天堂| 美国成人xxx| 国产在线播放观看| 国产成人小视频| 九九视频免费在线观看| 欧美二区在线观看| 黄色在线免费| 91久久精品国产91久久性色| 99久久.com| 日本不卡一区二区在线观看| 中文字幕亚洲欧美在线不卡| 中文字幕第31页| 日韩在线视频一区| 国产欧美日韩电影| 黄色小视频大全| 国产99久久久国产精品免费看| 欧美日韩人妻精品一区二区三区| 欧美一区二区视频在线观看| h片在线免费| 成人高清在线观看| 在线观看视频日韩| 超碰97在线资源站| 欧美三级免费观看| 成人精品一区二区三区校园激情| 国产欧美欧洲在线观看| 99精品电影| avtt中文字幕| 精品久久久久久久久久久久| 欧美孕妇性xxxⅹ精品hd| 国产成人免费91av在线| 99久久亚洲精品蜜臀| 极品人妻一区二区| 姬川优奈aav一区二区| 可以直接在线观看的av| 国产美女精品视频免费观看| 中国成人一区| 91精品啪在线观看国产| 一本色道a无线码一区v| 在线观看精品一区二区三区| 91在线网站视频| 999在线观看精品免费不卡网站| 亚洲第一页av| 欧美美女一区二区在线观看| 免费av不卡在线观看| 久久综合狠狠综合久久综青草| 免费成人在线网站| 激情综合五月网| 亚洲天堂成人在线视频| 91精品国产一区二区在线观看 | 五月天婷婷网站| 亚洲欧洲一区二区三区久久| 九七影院97影院理论片久久| 777久久精品一区二区三区无码| va亚洲va日韩不卡在线观看| 亚洲欧美一二三区| 欧美日韩国产成人高清视频| 免费成人网www| 三级黄色片免费看| 色综合夜色一区| 一区二区三区伦理| 日韩福利二区| 成人福利视频在线看| 亚洲视频中文字幕在线观看| 欧美极品xxxx| 色喇叭免费久久综合网| 国产又粗又长又爽| 欧美高清精品3d| 午夜精品久久久久久久久久蜜桃|