使用httpclient中EntityUtils類解析entity遇到socket closed錯誤的緣由

本人在使用httpclient作接口測試的時候,最近程序偶然報socket closed錯誤,上週通過排查發現是request.releaseConnection()這個方法搞得鬼,也是本身學藝不精,沒有真正理解方法的含義,改掉以後其餘接口就沒有出現過這個問題,今天又遇到了,又從新排查了本身的方法,發現還有一種致使socket closed的緣由,由於個人響應對象建立時用的是CloseableHttpResponse類,因此須要關閉,在某些時候response太大可能致使使用EntityUtils.toString(entity)解析實體的時候出錯,我的理解是因爲response的並未徹底解析到entity裏面時已經執行了close()方法致使的,試着把close()方法後置,完美解決問題。java

下面是個人錯誤代碼片斷:編程

try {
			response.close();
		} catch (IOException e2) {
			output("響應關閉失敗!", e2);
		}
		data_size = entity.getContentLength();// 獲取相應數據大小
		if (data_size == -1) {// 若是爲-1,則重置data_size
			data_size = 0;
		}
		String content = null;
		try {
			content = EntityUtils.toString(entity);// 用string接收響應實體
			
			EntityUtils.consume(entity);// 消耗響應實體
		} catch (ParseException e1) {
			output("解析響應實體異常!", e1);
		} catch (IOException e1) {
			output("解析響應實體時java IO 異常!", e1);
		} // 解析響應

下面是修改以後的代碼片斷:框架

String content = null;
		try {
			content = EntityUtils.toString(entity);// 用string接收響應實體
			EntityUtils.consume(entity);// 消耗響應實體
		} catch (ParseException e1) {
			output("解析響應實體異常!", e1);
		} catch (IOException e1) {
			output("解析響應實體時java IO 異常!", e1);
		} // 解析響應
		try {
			response.close();
		} catch (IOException e2) {
			output("響應關閉失敗!", e2);
		}

技術類文章精選

  1. java一行代碼打印心形
  2. Linux性能監控軟件netdata中文漢化版
  3. 接口測試代碼覆蓋率(jacoco)方案分享
  4. 性能測試框架
  5. 如何在Linux命令行界面愉快進行性能測試
  6. 圖解HTTP腦圖
  7. 如何測試機率型業務接口
  8. httpclient處理多用戶同時在線
  9. 將swagger文檔自動變成測試代碼
  10. 五行代碼構建靜態博客
  11. httpclient如何處理302重定向
  12. 基於java的直線型接口測試框架初探

非技術文章精選

  1. 爲何選擇軟件測試做爲職業道路?
  2. 成爲傑出Java開發人員的10個步驟
  3. 寫給全部人的編程思惟
  4. 自動化測試的障礙
  5. 自動化測試的問題所在
  6. 測試之《代碼不朽》腦圖

點擊查看公衆號地圖

相關文章
相關標籤/搜索