在http POST/GET 请求函数内加上以下代码【推荐以下】
HttpClient 设置超时后,若在设定的时间内没有返回数据,httpClient底层会重复请求
DefaultHttpClient client = new DefaultHttpClient(); client.getParams().setParameter(CoreConnectionPNames.CONNECTION_TIMEOUT, 5000);// 请求超时 client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT, 10000);// 连接超时 client.setHttpRequestRetryHandler(new DefaultHttpRequestRetryHandler(0, false));//防止重复提交
或者:
// 设置 HttpPost请求超时为 5 秒 RequestConfig requestConfig = RequestConfig.custom() .setSocketTimeout(5000).setConnectTimeout(5000).build(); HttpPost httpPost = new HttpPost(url); httpPost.setConfig(requestConfig);
以下仅供参考:
一、发现问题
环境:chrome apache php
今天在接口本地开发的时候发现数据重复插入,通过查看apache的access.log日志发现有两条请求日志
二、解决问题
通过百度等手段,了解可能原因是 http 的keep alive导致(参考:https://blog.csdn.net/edward30/article/details/8661105),在代码中添加"Connection: close"发现没有起作用。应该不是这个原因导致。继续思考,最后在chrome高级设置中,找到两项可疑配置
在关闭两项后 问题解决。