http 超时设置

HttpClient这货和Lucene一样,每个版本的API都变化很大,这有点让人头疼。就好比创建一个HttpClient对象吧,每一个版本的都不一样。

3.X是这样的 :

HttpClient httpClient=new DefaultHttpClient();

4.3是这样的:
CloseableHttpClient httpClient = HttpClients.createDefault();

当然,上面这些变化只不过是一些小变化,大家看看API大家就都会了。

超时设置讲解:

我要讲的是超时设置,HttpClient有三种超时设置,最近比较忙,没时间具体归纳总结,以后再补上,我这里就讲一些最简单最易用的超时设置方法。

这是个3.X的超时设置方法
HttpClient client = new HttpClient();
client.setConnectionTimeout(30000);
client.setTimeout(30000);
HttpClient httpClient= new HttpClient();

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(5000);


4.X版本的超时设置(4.3后已过时)
HttpClient httpClient=new DefaultHttpClient();
//连接时间
httpClient.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT,2000);
//数据传输时间

httpClient.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,2000);


4.3版本超时设置
CloseableHttpClient httpClient = HttpClients.createDefault();
HttpGet httpGet=new HttpGet("http://www.baidu.com");//HTTP Get请求(POST雷同)
RequestConfig requestConfig = RequestConfig.custom().setSocketTimeout(2000).setConnectTimeout(2000).build();//设置请求和传输超时时间
httpGet.setConfig(requestConfig);
httpClient.execute(httpGet);//执行请求
BTW,4.3版本不设置超时的话,一旦服务器没有响应,等待时间N久(>24小时)。 
### 关于 HTTP Headers 配置请求超时时间 在标准的 HTTP 协议中,`HTTP Headers` 并不支持直接定义请求的超时时间。通常情况下,请求超时是由客户端(如浏览器或应用程序)自行管理的行为,而不是由服务器通过 `Headers` 来指定。然而,在实际开发中,可以借助某些框架的功能间接实现这一需求。 #### 使用 Axios 的方式动态设置超时时间 Axios 是一种流行的 JavaScript 库,用于发起 HTTP 请求。它允许开发者通过多种方式进行超时配置: 1. **全局默认超时时间** 可以通过 `axios.create()` 方法创建一个自定义实例,并在其选项中设定 `timeout` 参数[^2]。 ```javascript const instance = axios.create({ baseURL: 'https://example.com/api/', timeout: 5000, // 超时时间为 5 秒 headers: { 'Content-Type': 'application/json' } }); ``` 2. **单次请求中的超时时间** 如果需要为特定请求单独设置超时时间,可以在每次调用时传递 `config` 参数[^3]。 ```javascript axios.get('/data', { timeout: 3000 }) // 此处超时时间为 3 秒 .then(response => console.log(response.data)) .catch(error => console.error('请求失败:', error)); ``` 3. **基于接口动态调整超时时间** 当不同接口有不同的超时需求时,可针对具体场景创建独立的 Axios 实例。 ```javascript function createInstance(timeout) { return axios.create({ baseURL: 'https://example.com/api/', timeout, headers: { 'Authorization': 'Bearer token', 'Accept-Language': 'en-US' } }); } const shortTimeoutInstance = createInstance(2000); shortTimeoutInstance.get('/fast-endpoint') .then(response => console.log(response.data)) .catch(error => console.error('快速接口请求失败:', error)); const longTimeoutInstance = createInstance(10000); longTimeoutInstance.post('/slow-endpoint', {}) .then(response => console.log(response.data)) .catch(error => console.error('慢速接口请求失败:', error)); ``` 4. **响应拦截器处理超时逻辑** 利用 Axios 提供的响应拦截功能捕获超时错误并执行额外的操作[^1]。 ```javascript const instance = axios.create(); instance.interceptors.response.use( (response) => response, (error) => { if (error.code === 'ECONNABORTED' && error.message.includes('timeout')) { console.warn('请求已超时'); // 执行其他业务逻辑,例如关闭加载动画或提示用户 } else { console.error('请求发生未知错误:', error.message); } return Promise.reject(error); } ); ``` #### 总结 虽然 HTTP 头部本身并不具备直接控制超时的能力,但在前端应用中可通过 Axios 或类似的库灵活地管理和定制请求行为。上述方法展示了如何利用 Axios 动态设置超时时间和处理相关异常。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值