精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

亚洲福利影片在线| 亚洲自拍偷拍九九九| 国产精品女主播视频| 国产wwwwxxxx| 精品五月天堂| 欧美在线色视频| 最近中文字幕免费mv| 手机在线精品视频| 蜜桃视频在线观看一区| 久久久久久久久久av| 免费看裸体网站| 在线精品国产亚洲| 欧美无人高清视频在线观看| youjizz.com在线观看| 理论视频在线| 亚洲精品乱码久久| 亚洲av少妇一区二区在线观看| 亚洲黄页一区| www.日韩视频| 亚洲av永久无码精品| 欧美一级做a| 色婷婷国产精品久久包臀| 中文字幕乱码一区二区三区 | 伊人蜜桃色噜噜激情综合| 亚洲人成伊人成综合网久久久| 亚洲黄色片免费看| 户外露出一区二区三区| 亚洲成av人片在www色猫咪| 在线观看日韩羞羞视频| 欧美日韩视频精品二区| 成人性生交大片免费看视频在线 | 在线日韩成人| 69成人精品免费视频| 国产天堂在线播放| 瑟瑟视频在线看| 亚洲一卡二卡三卡四卡| 免费成人深夜夜行网站视频| 二区在线视频| 国产亚洲精品bt天堂精选| 精品一区久久| 五月激情六月婷婷| 丁香激情综合五月| 444亚洲人体| 国产精品久久久久久久久久久久久久久久 | 亚洲最大的黄色网址| 欧美黄色大片在线观看| 尤物tv国产一区| 日本一级免费视频| 久久99影视| 亚洲欧美日韩国产中文专区| 超碰97在线资源站| 天堂在线精品| 亚洲欧美激情在线视频| 粉嫩av蜜桃av蜜臀av| 秋霞影视一区二区三区| 亚洲精品720p| 青青草成人免费视频| 加勒比中文字幕精品| 亚洲国产成人久久| 超碰男人的天堂| 欧美交a欧美精品喷水| 亚洲精品久久久久久下一站 | 蜜桃一区二区三区| 亚洲男人天堂久| 受虐m奴xxx在线观看| 国产一区网站| 日韩在线观看视频免费| 中国一级片在线观看| 欧美一区不卡| 久久久久国产精品一区| 影音先锋亚洲天堂| 丝袜美腿高跟呻吟高潮一区| 国产精品青草久久久久福利99| 久久国产视频一区| 免费观看成人鲁鲁鲁鲁鲁视频| 国产欧美 在线欧美| 国产有码在线观看| 国产高清无密码一区二区三区| 成人情视频高清免费观看电影| 免费看国产片在线观看| 91丨九色porny丨蝌蚪| 日韩精品久久久免费观看| 暖暖日本在线观看| 亚洲一区二区三区美女| 国产乱子夫妻xx黑人xyx真爽| www成人在线视频| 这里只有精品免费| 黑丝av在线播放| 欧美日韩久久精品| 欧美精品免费播放| 日本免费在线观看视频| 国产综合色产在线精品| 国产欧美一区二区视频| 国产精品二线| 一个色综合网站| 97公开免费视频| 这里视频有精品| 亚洲少妇激情视频| 国产免费无码一区二区视频| 久久精品伊人| 99精品欧美一区二区三区| 青青草观看免费视频在线| 中文字幕中文字幕中文字幕亚洲无线| 久久手机在线视频| 99久久久国产精品免费调教网站| 日韩欧美一区电影| 国产又黄又粗视频| 一区在线免费| 成人www视频在线观看| 视频一区二区免费| 自拍偷拍欧美激情| 老熟妇仑乱视频一区二区| 日韩精品中文字幕一区二区| 亚洲日本成人网| 国产香蕉在线视频| 精品在线一区二区| 日韩妆和欧美的一区二区| 黑人极品ⅴideos精品欧美棵| 欧美性受极品xxxx喷水| 一起草在线视频| 欧美va亚洲va日韩∨a综合色| 国产精品极品尤物在线观看| 午夜小视频免费| 亚洲一卡二卡三卡四卡 | 99视频精品全部免费在线| 咪咪色在线视频| 成人国产在线| 亚洲人成亚洲人成在线观看| 日韩字幕在线观看| 国产99精品国产| 亚洲色图都市激情| 欧美伊人亚洲伊人色综合动图| 亚洲精品一区久久久久久| 久久免费视频播放| 国模无码大尺度一区二区三区| 日韩资源av在线| 日本成人伦理电影| 国产一区二区三区视频免费| 国产专区第一页| 91香蕉视频黄| 欧美综合在线播放| 精品国内亚洲2022精品成人| 久久久中精品2020中文| www.亚洲欧美| 亚洲伊人伊色伊影伊综合网 | 暴力调教一区二区三区| 99er在线视频| 高潮按摩久久久久久av免费| 精品中文字幕在线2019| 国产ts人妖调教重口男| 亚洲三级免费观看| 无码国产精品一区二区高潮| 国产精品久久久久一区二区三区厕所| 国产美女久久久| 日本亚洲精品| 69久久99精品久久久久婷婷| 加勒比婷婷色综合久久| 国产一级精品在线| 日韩视频一二三| 一区二区三区在线资源| 久久久久久国产三级电影| 免费观看毛片网站| 欧美日韩美女视频| 制服 丝袜 综合 日韩 欧美| 日本不卡的三区四区五区| 日韩精品大片| 国产一区二区三区免费在线 | 中文字幕一区二区三区最新 | 欧洲亚洲一区二区| 日韩中文在线播放| 自拍偷拍亚洲欧美| 国产女人18毛片水18精| 亚洲一区在线观看网站| 中文字幕免费在线播放| 日韩经典中文字幕一区| 一区二区三区四区欧美| 久久九九精品视频| 久久久亚洲成人| 你懂的在线视频| 欧美日韩国产小视频| 久草视频免费在线播放| 久久亚洲欧美国产精品乐播| 日本黄色福利视频| 伊人成年综合电影网| 欧美亚洲精品日韩| 国产精品亚洲欧美日韩一区在线| 久久男人的天堂| 国产区av在线| 欧美mv日韩mv国产网站app| 午夜婷婷在线观看| 亚洲色图第一区| aa一级黄色片| 国产美女久久久久| 中国丰满人妻videoshd| 久久久久国产精品| 久久精品人人做人人爽电影| 日本欧美在线| 538国产精品一区二区在线| 亚洲视频tv| 日韩成人在线观看| 国产视频第一页| 色狠狠色狠狠综合| 久久婷婷综合国产| 国产精品妹子av| 在线观看国产网站| 国产一区二区三区免费观看| 男女曰b免费视频| 欧美91大片| 亚洲一区二区三区加勒比| 欧美日韩一区二区三区不卡视频| 国产欧美最新羞羞视频在线观看| 欧美裸体视频| 欧美日韩福利在线观看| 日韩专区在线| 亚洲深夜福利视频| 色wwwwww| 欧美第一区第二区| 国产精品久久久久毛片| 欧美在线一二三四区| 国产精品黄色大片| 亚洲一区av在线| 激情四射综合网| 《视频一区视频二区| 人与嘼交av免费| 久久亚洲精品国产精品紫薇| 日本性生活一级片| 国产福利一区二区三区视频 | 免费无码国产精品| 精品国产老师黑色丝袜高跟鞋| 国产人妻精品一区二区三区不卡| 国产精品丝袜一区| av女人的天堂| 26uuu国产一区二区三区| 丰满岳乱妇一区二区| 国产老肥熟一区二区三区| 午夜精品久久久久久久99热影院| 日韩高清中文字幕一区| 国产无套内射久久久国产| 国产一级久久| 欧美一区二区三区爽大粗免费| 黄色另类av| 国产在线xxxx| 伊人影院久久| 国产原创中文在线观看| 一道本一区二区| 国产极品尤物在线| 亚洲精品视频啊美女在线直播| 91免费黄视频| 99热这里只有精品8| 99精品人妻少妇一区二区| 夜夜夜久久久| 任你操这里只有精品| 老色鬼久久亚洲一区二区| 欧美两根一起进3p做受视频| 日韩精品久久久久久| 午夜国产一区二区三区| 麻豆精品久久精品色综合| 999在线观看| 久久97超碰色| 最好看的中文字幕| 岛国一区二区三区| 久久精品一区二区免费播放| 国产日韩视频一区二区三区| 黄大色黄女片18免费| 中文字幕综合网| 久久久久无码国产精品不卡| 午夜精品久久久久久久| av图片在线观看| 欧美日韩国产三级| 精品久久久久久亚洲综合网站| 亚洲成人av片| 国产剧情在线观看| 久久久999精品视频| 超碰在线网站| 国产国产精品人在线视| 伊人久久一区| 韩国成人一区| 欧美亚洲精品在线| 狠狠精品干练久久久无码中文字幕| 亚洲人成久久| 亚洲不卡视频在线| 国产91在线观看丝袜| 国产精品1000部啪视频| 国产精品国产a级| 69精品久久久| 欧美午夜在线观看| 亚洲av综合色区无码一二三区| 亚洲激情国产精品| 东凛在线观看| 国内成人精品一区| 国产精品麻豆成人av电影艾秋| 国产精品久久久久久久久婷婷 | a级网站在线观看| 亚洲黄色三级| 成人av毛片在线观看| 2023国产精品自拍| 美女的奶胸大爽爽大片| 色哟哟国产精品| 亚洲伦理在线观看| 宅男66日本亚洲欧美视频| 9999精品成人免费毛片在线看| 国产精品美女免费视频| 欧美理论电影在线精品| 大桥未久一区二区三区| 免费亚洲一区| 91人妻一区二区| 中文字幕亚洲电影| 日韩 国产 欧美| 亚洲国产精彩中文乱码av在线播放 | 国产91高潮流白浆在线麻豆| 一二三四在线观看视频| 激情成人在线视频| 国产极品久久久| 深夜成人在线观看| 亚洲校园激情春色| 成人三级在线| 亚洲成人精选| 日本在线播放一区二区| 久久久久久久久97黄色工厂| 黄色小视频在线免费看| 欧美一区二区在线不卡| 9色在线视频| 日韩美女视频免费在线观看| 韩国精品福利一区二区三区| 女同性恋一区二区| 麻豆精品视频在线| 美国美女黄色片| 色婷婷久久一区二区三区麻豆| 人人妻人人澡人人爽久久av| 久久中文字幕视频| 99综合久久| 日韩第一页在线观看| 久久成人av少妇免费| 永久免费观看片现看| 欧美午夜精品久久久| www 日韩| 国产欧美精品xxxx另类| 波多野结衣一区| 手机在线成人免费视频| 欧美国产欧美亚州国产日韩mv天天看完整| 精品国产xxx| 国产亚洲一级高清| 日韩影片中文字幕| 日本黑人久久| 日本视频中文字幕一区二区三区| 公侵犯人妻一区二区三区| 色婷婷av久久久久久久| 国产女主播在线直播| 国产精品成人国产乱一区| 日本不卡高清| 污网站在线免费| 亚洲欧美日韩精品久久久久| ,亚洲人成毛片在线播放| 久热在线中文字幕色999舞| 久久av偷拍| 999在线观看视频| 久久这里只有精品首页| 亚洲国产av一区二区三区| 永久555www成人免费| 视频91a欧美| 91视频 - 88av| 99精品视频一区二区| 欧美日韩综合一区二区三区| 色噜噜国产精品视频一区二区| 成人污版视频| 日本一区午夜艳熟免费| 91视频com| 中文字幕在线观看1| 欧美日本在线视频中文字字幕| 激情av综合| 一区二区三区网址| 亚洲女子a中天字幕| 欧美在线精品一区二区三区| 日本高清视频精品| 色综合狠狠操| 四虎永久免费观看| 一本久久a久久精品亚洲| 香蕉视频在线播放| 69174成人网| 免费亚洲一区| www.99re7| 精品亚洲一区二区三区在线观看| 欧美亚洲综合视频| 东北少妇不带套对白| 国产女主播视频一区二区| 亚洲国产一二三区| 国产91久久婷婷一区二区| 欧美日本免费| 蜜桃久久精品成人无码av| 日韩欧美一级精品久久| 日本综合久久| 2019日韩中文字幕mv| 国产精品视频看| 秋霞视频一区二区| 成人国产精品av| 羞羞答答国产精品www一本| 四虎永久免费地址| 精品亚洲一区二区三区| 欧美日韩国产一区二区在线观看| 日韩av片在线看|