日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何使用新的Apache Http Client发出HEAD请求

發(fā)布時間:2023/12/3 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何使用新的Apache Http Client发出HEAD请求 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

如果您已更新Apache HTTP Client代碼以使用最新的庫(在撰寫本文時,它是4.2.x版本的httpclient 4.3.5版本和httpcore 4.3.2版本),您會注意到某些類(例如org.apache.http.impl.client.DefaultHttpClient或org.apache.http.params.HttpParams已被棄用。 好吧,我去過那里,所以在這篇文章中,我將介紹如何通過使用新類擺脫警告。

1.

我將用于演示的用例很簡單:我有一個批處理作業(yè),以檢查是否有新的情節(jié)可用于播客。 為了避免在沒有新情節(jié)的情況下必須獲取和解析提要,我先驗證自上次調(diào)用以來eTag或提要資源的last-modified標頭是否已更改。 如果供稿發(fā)布者支持這些標頭,這將起作用,我強烈建議您使用這些標頭,因為這樣可以節(jié)省使用者的帶寬和處理能力。

那么它是如何工作的呢? 最初,當(dāng)將新的播客添加到Podcastpedia.org目錄時,我檢查供稿資源的標頭是否存在,如果存在,則將其存儲在數(shù)據(jù)庫中。 為此,我借助Apache Http Client對提要的URL執(zhí)行HTTP HEAD請求。 根據(jù)超文本傳輸??協(xié)議HTTP / 1.1 rfc2616 ,HTTP頭中包含的響應(yīng)HEAD請求的元信息應(yīng)與響應(yīng)GET請求發(fā)送的信息相同。

在以下各節(jié)中,我將介紹在升級到Apache Http Client的4.3.x版本之前和之后,代碼在Java中的實際外觀。

2.遷移到4.3.x版本

軟件依賴

要構(gòu)建我的項目,該項目現(xiàn)在可以在GitHub – Podcastpedia-batch上使用 ,我正在使用maven,因此在下面列出了Apache Http Client所需的依賴項:

2.1.1。 之前

Apache Http Client依賴項4.2.x

<!-- Apache Http client --> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.2.5</version> </dependency> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.2.4</version> </dependency>

2.1.2。 后

Apache Http Client依賴項

<!-- Apache Http client --> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpclient</artifactId><version>4.3.5</version> </dependency> <dependency><groupId>org.apache.httpcomponents</groupId><artifactId>httpcore</artifactId><version>4.3.2</version> </dependency>

Apache Http Client的HEAD請求

2.2.1。 v4.2.x之前

使用Apache HttpClient執(zhí)行HEAD請求的示例

private void setHeaderFieldAttributes(Podcast podcast) throws ClientProtocolException, IOException, DateParseException{HttpHead headMethod = null; headMethod = new HttpHead(podcast.getUrl());org.apache.http.client.HttpClient httpClient = new DefaultHttpClient(poolingClientConnectionManager);HttpParams params = httpClient.getParams();org.apache.http.params.HttpConnectionParams.setConnectionTimeout(params, 10000);org.apache.http.params.HttpConnectionParams.setSoTimeout(params, 10000);HttpResponse httpResponse = httpClient.execute(headMethod);int statusCode = httpResponse.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {LOG.error("The introduced URL is not valid " + podcast.getUrl() + " : " + statusCode);}//set the new etag if existentorg.apache.http.Header eTagHeader = httpResponse.getLastHeader("etag");if(eTagHeader != null){podcast.setEtagHeaderField(eTagHeader.getValue());}//set the new "last modified" header field if existent org.apache.http.Header lastModifiedHeader= httpResponse.getLastHeader("last-modified");if(lastModifiedHeader != null) {podcast.setLastModifiedHeaderField(DateUtil.parseDate(lastModifiedHeader.getValue()));podcast.setLastModifiedHeaderFieldStr(lastModifiedHeader.getValue());} // Release the connection.headMethod.releaseConnection(); }

如果您使用的是智能IDE,它將告訴您DefaultHttpClient , HttpParams和HttpConnectionParams已棄用。 如果您現(xiàn)在查看他們的Java文檔,將會得到替換建議,即使用HttpClientBuilder和org.apache.http.config提供的類。

因此,正如您將在下一節(jié)中看到的那樣,這正是我所做的。

2.2.2。 在v 4.3.x之后

帶有Apache Http Client v 4.3.x的HEAD請求示例

private void setHeaderFieldAttributes(Podcast podcast) throws ClientProtocolException, IOException, DateParseException{HttpHead headMethod = null; headMethod = new HttpHead(podcast.getUrl());RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(TIMEOUT * 1000).setConnectTimeout(TIMEOUT * 1000).build();CloseableHttpClient httpClient = HttpClientBuilder.create().setDefaultRequestConfig(requestConfig).setConnectionManager(poolingHttpClientConnectionManager).build();HttpResponse httpResponse = httpClient.execute(headMethod);int statusCode = httpResponse.getStatusLine().getStatusCode();if (statusCode != HttpStatus.SC_OK) {LOG.error("The introduced URL is not valid " + podcast.getUrl() + " : " + statusCode);}//set the new etag if existentHeader eTagHeader = httpResponse.getLastHeader("etag");if(eTagHeader != null){podcast.setEtagHeaderField(eTagHeader.getValue());}//set the new "last modified" header field if existent Header lastModifiedHeader= httpResponse.getLastHeader("last-modified");if(lastModifiedHeader != null) {podcast.setLastModifiedHeaderField(DateUtil.parseDate(lastModifiedHeader.getValue()));podcast.setLastModifiedHeaderFieldStr(lastModifiedHeader.getValue());} // Release the connection.headMethod.releaseConnection(); }

注意:

  • HttpClientBuilder如何用于構(gòu)建ClosableHttpClient [11-15行],這是HttpClient的基本實現(xiàn),該實現(xiàn)也實現(xiàn)了Closeable
  • 以前版本的HttpParams已被org.apache.http.client.config.RequestConfig [第6-9行]取代,可以在其中設(shè)置套接字和連接超時。 稍后在構(gòu)建HttpClient時使用此配置(第13行)

剩下的代碼很簡單:

  • HEAD請求被執(zhí)行(第17行)
  • 如果存在,則eTag和last-modified標頭將保留。
  • 最后,重置請求的內(nèi)部狀態(tài),使其可重用– headMethod.releaseConnection()

2.2.3。 從代理后面進行http呼叫

如果您位于代理后面,則可以通過在RequestConfig上設(shè)置org.apache.http.HttpHost代理主機來輕松配置HTTP調(diào)用:

代理后面的HTTP調(diào)用

HttpHost proxy = new HttpHost("xx.xx.xx.xx", 8080, "http"); RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(TIMEOUT * 1000).setConnectTimeout(TIMEOUT * 1000).setProxy(proxy).build();

資源資源

源代碼– GitHub

  • podcastpedia-batch –將新的Podcast從文件添加到Podcast目錄的工作,使用帖子中提供的代碼來保留eTag和lastModified標頭; 它仍在進行中。 如果您有任何改進建議,請?zhí)岢鲆?

網(wǎng)頁

  • 超文本傳輸??協(xié)議-HTTP / 1.1
  • Maven倉庫
    • HttpComponents客戶端

翻譯自: https://www.javacodegeeks.com/2014/08/how-to-use-the-new-apache-http-client-to-make-a-head-request.html

總結(jié)

以上是生活随笔為你收集整理的如何使用新的Apache Http Client发出HEAD请求的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 青草超碰 | 国产二区三区 | 欧美日韩一区二区三区在线 | 亚洲卡一卡二 | 精品视频一二 | 狠狠躁18三区二区一区 | 99色亚洲| 精品国产乱码久久久久久浪潮 | 国产区小视频 | 中文字幕乱码亚洲无线三区 | 日韩影院一区 | 国产亚洲福利 | 午夜一本 | 国产97在线 | 亚洲 | 国产做爰xxxⅹ久久久精华液 | 999久久久免费精品国产 | 四虎影裤 | 男女啪啪av | 成人资源在线观看 | 国产精品变态另类虐交 | 美女久久精品 | 精品孕妇一区二区三区 | 免费福利视频网站 | 亚洲av无码国产精品色午夜 | 男女日批视频 | 天堂中文av在线 | 亚洲性综合 | 亚洲国产精品久久久久爰色欲 | 射黄视频| 亚洲国语| 国产综合在线观看 | 国产夜夜操 | 97香蕉久久夜色精品国产 | 福利综合网 | 久久精品视频在线免费观看 | 成人福利社 | 色综合图片 | 欧美日韩午夜爽爽 | 久久久综合视频 | 午夜黄色一级片 | 请用你的手指扰乱我吧 | 在线观看一区二区视频 | 成人在线h | 国精产品一二三区精华液 | 日本不卡一二 | 成人精品在线 | 69视频国产 | 人妻熟女aⅴ一区二区三区汇编 | 欧美高清在线视频 | 在线观看成人 | 天天噜夜夜噜 | 美女屁股眼视频免费 | 免费一二区 | 在线日韩亚洲 | 国产精品17p| 亚洲区自拍 | 亚洲一区二区三区乱码 | 欧美一区二区三区四区视频 | 最新欧美日韩 | 骑骑上司妻电影 | 午夜吃瓜 | 午夜视频在线免费观看 | 成人性生交大免费看 | 全部孕妇毛片丰满孕妇孕交 | 人人插人人草 | 波多野结衣一区二区三区中文字幕 | 欧美日本黄色 | 91最新入口 | 美女在线观看www | 中文字幕在线2018 | 激情久久五月 | 亚洲欧美日韩精品久久亚洲区 | 免费三片在线视频 | 乱子伦一区 | 色偷偷免费 | 丁香视频在线观看 | 美女精品久久 | 韩日精品在线 | 亚洲女同视频 | 日韩精品视频在线免费观看 | 久久久久久久久免费 | 四虎国产在线观看 | 日本黄色免费看 | 国产丝袜一区二区三区 | 爱爱免费视频网站 | 国产乱人乱精一区二视频国产精品 | 久久国内视频 | 亚洲一区二区在线电影 | 欧美群妇大交乱 | 欧美成人猛片aaaaaaa | 91夫妻视频| 亚洲精品污一区二区三区 | 五月激情六月 | 超碰天天| 欧美一区二区福利视频 | 国产又黄又爽又色 | 国产小视频免费在线观看 | 青青艹av| 午夜视频网站 |