【HttpClient4.5中文教程】七. 异常处理

2024-05-31 23:08

本文主要是介绍【HttpClient4.5中文教程】七. 异常处理,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

HttpClient 能够抛出两种类型的异常:

1)java.io.IOException :在 I/O 失败时,如socket连接超时或被重置的异常;

2)HttpException:标志 HTTP 请求失败的信号,如违反 HTTP 协议。通常 I/O 错误被认为是非致命的和可以恢复的,而 HTTP 协议错误,则被认为是致命的而且是不能自动恢复的。请注意HttpClient实现了可抛出异常HttpExceptions为ClientProtocolException,也是 java.io.IOException的子类。这使HttpClient使用者能够在一个单一的catch子句中处理 IOException HttpException

1. HTTP传输安全

要理解 HTTP 协议并不是对所有类型的应用程序都适合的,这一点很重要。 HTTP 是一个
简单的面向请求/响应的协议,最初被设计用来支持取回静态或动态生成的内容。它从未打算支持事务性操作。比如,如果成功收到和处理请求, HTTP 服务器将不会考虑是否只完成了部分请求,它仅生成一个响应并发送一个状态码到客户端。如果客户端因为读取超时,请求取消或系统崩溃导致接收响应实体失败时,服务器不会试图回滚事务。如果客户端决定
决定发送相同的请求,那么服务器将不可避免地多次执行这个相同的事务。在一些情况下,这会导致应用数据污染或者应用程序状态不一致。
尽管 HTTP 从来都没有被设计来支持事务性处理,但它仍然能被用作于一个对目标应用提供被确定状态传输协议。要保证 HTTP 传输层的安全,系统必须保证 HTTP 方法在应用层的幂等性。

2.幂等方法

HTTP/1.1 详细地定义了幂等的方法:
[Methods can also have the property of "idempotence" in that (aside from error or expiration issues)the side-effects of N > 0 identical requests is the same as for a single request]
换句话说,应用程序应该确保-它是准备着的来处理相同方法的不同执行含义。这是可以达到的,比如,通过提供一个唯一的事务 ID 和避免执行相同逻辑操作的方法。
请注意,这个问题对于 HttpClient 是不明确的。基于应用的浏览器确切的说也受到了相同的问题:与非幂等的 HTTP方法有关。
HttpClient 中非内含实体方法,比如GET和HEAD 是幂等的,而内含实体方法,比如POST和PUT则不是幂等的。


3.自动的异常回复

默认情况下, HttpClient 会试图自动从 I/O 异常中恢复。默认的自动恢复机制仅可以对几个被认为是安全的异常起作用。
 #HttpClient 不会尝试从任意逻辑或 HTTP 协议的异常(原文为errors)中恢复(那些是从 HttpException 类中派生出的异常类)。
 #HttpClient 将会自动重新执行那些假设是幂等的方法。

 #HttpClient 将会自动重新执行那些由于传输异常导致的失败,而 HTTP 请求仍然被传送到目标服务器的方法。(也就是请求没有完整的被传送到服务器)


4.请求尝试处理器(Request retry handler)

 为了能够使用自定义异常的恢复机制,你必须提供一个HttpRequestRetryHandler接口的实现。


请注意你可以使用StandardHttpRequestRetryHandler代替默认使用的,以便处理那些被RFC-2616定义为幂等的并且能够安全的重试的请求方法。方法有:GET, HEAD, PUT, DELETE, OPTIONS, and TRACE。

这篇关于【HttpClient4.5中文教程】七. 异常处理的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1019303

相关文章

Python调用LibreOffice处理自动化文档的完整指南

《Python调用LibreOffice处理自动化文档的完整指南》在数字化转型的浪潮中,文档处理自动化已成为提升效率的关键,LibreOffice作为开源办公软件的佼佼者,其命令行功能结合Python... 目录引言一、环境搭建:三步构建自动化基石1. 安装LibreOffice与python2. 验证安装

python使用Akshare与Streamlit实现股票估值分析教程(图文代码)

《python使用Akshare与Streamlit实现股票估值分析教程(图文代码)》入职测试中的一道题,要求:从Akshare下载某一个股票近十年的财务报表包括,资产负债表,利润表,现金流量表,保存... 目录一、前言二、核心知识点梳理1、Akshare数据获取2、Pandas数据处理3、Matplotl

Java使用Thumbnailator库实现图片处理与压缩功能

《Java使用Thumbnailator库实现图片处理与压缩功能》Thumbnailator是高性能Java图像处理库,支持缩放、旋转、水印添加、裁剪及格式转换,提供易用API和性能优化,适合Web应... 目录1. 图片处理库Thumbnailator介绍2. 基本和指定大小图片缩放功能2.1 图片缩放的

Python pandas库自学超详细教程

《Pythonpandas库自学超详细教程》文章介绍了Pandas库的基本功能、安装方法及核心操作,涵盖数据导入(CSV/Excel等)、数据结构(Series、DataFrame)、数据清洗、转换... 目录一、什么是Pandas库(1)、Pandas 应用(2)、Pandas 功能(3)、数据结构二、安

Java.lang.InterruptedException被中止异常的原因及解决方案

《Java.lang.InterruptedException被中止异常的原因及解决方案》Java.lang.InterruptedException是线程被中断时抛出的异常,用于协作停止执行,常见于... 目录报错问题报错原因解决方法Java.lang.InterruptedException 是 Jav

Python进行JSON和Excel文件转换处理指南

《Python进行JSON和Excel文件转换处理指南》在数据交换与系统集成中,JSON与Excel是两种极为常见的数据格式,本文将介绍如何使用Python实现将JSON转换为格式化的Excel文件,... 目录将 jsON 导入为格式化 Excel将 Excel 导出为结构化 JSON处理嵌套 JSON:

SQL Server安装时候没有中文选项的解决方法

《SQLServer安装时候没有中文选项的解决方法》用户安装SQLServer时界面全英文,无中文选项,通过修改安装设置中的国家或地区为中文中国,重启安装程序后界面恢复中文,解决了问题,对SQLSe... 你是不是在安装SQL Server时候发现安装界面和别人不同,并且无论如何都没有中文选项?这个问题也

2025版mysql8.0.41 winx64 手动安装详细教程

《2025版mysql8.0.41winx64手动安装详细教程》本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,... 目录一、下载安装包二、配置环境变量三、安装配置四、启动 mysql 服务,修改密码一、下载安装包安装地

电脑提示d3dx11_43.dll缺失怎么办? DLL文件丢失的多种修复教程

《电脑提示d3dx11_43.dll缺失怎么办?DLL文件丢失的多种修复教程》在使用电脑玩游戏或运行某些图形处理软件时,有时会遇到系统提示“d3dx11_43.dll缺失”的错误,下面我们就来分享超... 在计算机使用过程中,我们可能会遇到一些错误提示,其中之一就是缺失某个dll文件。其中,d3dx11_4

Linux下在线安装启动VNC教程

《Linux下在线安装启动VNC教程》本文指导在CentOS7上在线安装VNC,包含安装、配置密码、启动/停止、清理重启步骤及注意事项,强调需安装VNC桌面以避免黑屏,并解决端口冲突和目录权限问题... 目录描述安装VNC安装 VNC 桌面可能遇到的问题总结描js述linux中的VNC就类似于Window