首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

是否有可能在HttpAsynClient中从HttpClient-5.x中止http请求[GET,POST等]?

在HttpAsyncClient中,可以通过设置一个标志位来中止HTTP请求。具体步骤如下:

  1. 创建一个自定义的HttpClientBuilder对象,并覆写其createHttpAsyncClient方法。在该方法中,创建一个CloseableHttpAsyncClient实例,并覆写其execute方法。
  2. 在execute方法中,将传入的HttpUriRequest对象封装成一个AbortableHttpRequest对象,然后调用execute方法执行请求。
  3. 在AbortableHttpRequest对象的execute方法中,判断一个标志位(例如isAborted),如果标志位为true,则直接返回空结果;否则,调用父类的execute方法执行请求。
  4. 当需要中止请求时,将标志位设置为true。

以下是一个示例代码:

代码语言:txt
复制
import org.apache.http.HttpResponse;
import org.apache.http.client.methods.HttpUriRequest;
import org.apache.http.impl.nio.client.CloseableHttpAsyncClient;
import org.apache.http.impl.nio.client.HttpAsyncClients;
import org.apache.http.nio.client.methods.AbortableHttpRequest;
import org.apache.http.nio.protocol.BasicAsyncResponseConsumer;
import org.apache.http.nio.protocol.HttpAsyncRequestProducer;
import org.apache.http.protocol.HttpContext;

public class CustomHttpAsyncClient {

    public CloseableHttpAsyncClient createHttpAsyncClient() {
        return HttpAsyncClients.custom()
                .setHttpAsyncRequester(new CustomHttpAsyncRequester())
                .build();
    }

    private class CustomHttpAsyncRequester extends DefaultHttpAsyncRequester {

        @Override
        public <T> Future<T> execute(
                final HttpAsyncRequestProducer requestProducer,
                final HttpAsyncResponseConsumer<T> responseConsumer,
                final HttpContext context,
                final FutureCallback<T> callback) {

            return super.execute(
                    new AbortableHttpRequestProducer(requestProducer),
                    responseConsumer,
                    context,
                    callback);
        }
    }

    private class AbortableHttpRequestProducer implements HttpAsyncRequestProducer {

        private final HttpAsyncRequestProducer requestProducer;
        private volatile boolean isAborted = false;

        public AbortableHttpRequestProducer(HttpAsyncRequestProducer requestProducer) {
            this.requestProducer = requestProducer;
        }

        @Override
        public HttpUriRequest generateRequest() throws IOException, HttpException {
            return requestProducer.generateRequest();
        }

        @Override
        public void produceContent(ContentEncoder encoder, IOControl ioControl) throws IOException {
            requestProducer.produceContent(encoder, ioControl);
        }

        @Override
        public void requestCompleted(HttpContext context) {
            requestProducer.requestCompleted(context);
        }

        @Override
        public boolean isRepeatable() {
            return requestProducer.isRepeatable();
        }

        @Override
        public void resetRequest() throws IOException {
            requestProducer.resetRequest();
        }

        @Override
        public void close() throws IOException {
            requestProducer.close();
        }

        @Override
        public void failed(Exception ex) {
            requestProducer.failed(ex);
        }

        @Override
        public void close(CloseMode closeMode) {
            isAborted = true;
            requestProducer.close(closeMode);
        }
    }
}

使用示例:

代码语言:txt
复制
CloseableHttpAsyncClient httpclient = new CustomHttpAsyncClient().createHttpAsyncClient();
httpclient.start();

HttpUriRequest request = new HttpGet("http://www.example.com");

Future<HttpResponse> future = httpclient.execute(request, new BasicAsyncResponseConsumer(), null);

// 在需要中止请求时
((AbortableHttpRequest) request).abort();

HttpResponse response = future.get();

这样,当调用((AbortableHttpRequest) request).abort()时,就可以中止HTTP请求。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

ES系列四、ES6.3常用api之文档类api

2.Get API: 获取文档 curl -XGET 'http://localhost:9200/twitter/tweet/1' 官方文档参考:Get API。...如果这是非空的,那么请求因为那些失败而中止。逐个查询是使用批处理实现的, 任何故障都会导致整个进程中止,但当前批处理的所有故障都会被收集到数组。...当第一个失败导致中止时,失败的批量请求返回的所有失败都将在failures元素返回; 因此,可能存在相当多的失败实体。...官方文档参考:Term Vector Api 12 批量返回分词:Multi termvectors API 采集term信息的方式两种:index-time(已经存储的索引查看) 和...,所以每一个过程都会有 translog 记录,如果中间任何一步失败了,服务器重启之后就会重试,保证数据写入。

1.7K10

Ajax 之战:XMLHttpRequest 与 Fetch API

我们现在将通用的“Ajax”术语表示任何服务器获取数据、更新 DOM 而无需刷新整个页面的客户端过程。...下面是一个简单的例子,你的域 / 服务 / 端点获取数据,然后在控制台将 JSON 结果显示为文本: const xhr = new XMLHttpRequest(); xhr.open("GET",...: 'default' —— 如果有一个新的 (未过期的) 匹配,则使用浏览器缓存;如果没有,浏览器会发出一个带条件的请求来检查资源是否已改变,并在必要时会发出新的请求 'no-store' —— 绕过浏览器缓存...可以设置为: 'omit' —— 排除 cookie 和 HTTP 认证项 (默认) 'same-origin' —— 包含对同源 url 的请求的凭证 'include' —— 包含所有请求的凭证...中止支持 运行请求可以通过 XMLHttpRequest 的 abort() 方法取消,如有必要,可以附加一个 abort 事件来处理: const xhr = new XMLHttpRequest

2.2K20

HTTP协议请求方法和状态码介绍

HTTP请求方法、状态码和Header是相互配合一起工作的,客户端通过HTTP的方法告诉服务器要执行什么动作,服务器通过状态码来告诉客户端动作是否执行成功。...2 HTTP请求方法哪些 常见的HTTP请求方法如下所示: 方法 描述 GET 请求指定的页面信息并返回实体主体 HEAD 类似GET请求,只不过返回的响应没有具体内容,用于获取报头 POST...POST请求可能会导致新的资源的建立或者对已有资源的修改 PUT 客户端向服务器传送的数据取代指定文档的内容 DELETE 请求服务器删除指定的页面 常见面试题:getpost请求的区别?...1、get请求是明文传输,请求参数会跟在url后面,以问号分割url和传输数据,参数之间用&相连,post请求是把提交的数据放到请求体的body,用户不能直接看到,相对而言安全点 2、get对传输的数据长度有限制...、对参数的数据类型,GET只接受ASCII码,而POST没有限制 3 HTTP状态码 每一个http请求的响应报文都会携带有一个状态码,这个状态码就是http status code,用来告知客户端此次请求是否成功

62030

Jenkins API+Pipeline深度实践之input的自动化

在生成的URL可以使用它来继续或中止 例如,可以使用特定的ID来机械地响应来自某些外部过程/工具的输入 https://www.thinbug.com/q/48799442 这篇文章中讲到了如何通过Jenkins...:///job///wfapi/inputSubmit 其他可用的api接口地址以及作用 用于中止流水线 http:...而其余时间发送请求都会返回404状态码,此时是无法接收post请求的,因此想要自动化执行input并不只是简单的向接口发送POST请求了 我这里的解决思路: 在发送流水线开始执行的请求后,立即通过代码循环请求并判断接口地址返回的状态码是否是...= 200: res_code_get = s.get(url=get_url, auth=('user_id', 'user_token')).status_code res_code_post...关键部分代码量很少,利用request并且携带认证参数进行请求,如果有大佬更好的方案欢迎与我交流 5、小结 到这里,通过一步步推理演进,在流水线input的自动化执行就完美实现了,最终既实现了调用

2.1K20

K8S 滚动更新如何优雅停止 Pod

假如我们先告诉网关或服务注册中心我们要下线,对方完成服务摘除操作再中止进程,那不会有任何流量受到影响;这是优雅停止,将单个组件的启停对整个系统影响最小化; 按照惯例,SIGKILL 是硬终止的信号,而...Pod的容器总是被同时调度,共同的运行环境。...[1] 滚动更新会出现的问题 在 k8s 执行 Rolling-Update 的时,默认会向旧的 pod 发生一个 SIGTERM 信号,如果业务应用没有对 SIGTERM 信号做处理的话,可能导致程序退出后也没有处理完请求...,会执行 PreStop hook,hook 可以执行一个 HTTP GET请求 或者 exec命令,并且它们执行是阻塞的,可以利用这个特性来做优雅停止。...调用 HTTP GET spec: contaienrs: - name: my-container lifecycle: preStop: httpGet:

5.7K10

中止请求和超时 跨域的HTTP请求 认证方式 JSONP

中止请求和超时 一个栗子在上传多少秒以后直接终止请求 // 发起HTTP GEt请求获取指定URl的内容 // 如果响应成功到达,将会传入responseText给回调函数 // 如果响应在timeout...// 创建新请求 var timedout = false; // 是否超时,设置标志 // 启动计时器,在timeout毫秒后将终止请求 var timer = setTimeout(() =...api通信 举例来自百度翻译的api接口 https://fanyi-api.baidu.com/api/trans/product/apidoc 上方是百度翻译的api文档 get请求url如下 http...用于对一段信息生成一段签名的摘要,在GET或者POST请求内 token token的鉴权流程 https://help.aliyun.com/document_detail/54226.html?...后面部分 // 使用JSONP作为参数名 if (url.indexOf('?') === -1) // 如果url没有查询部分 url += '?

1.9K20

前端-Ajax的全面总结

能根据不同需要进行调用,写法更加简洁,但是为了兼顾各个方法在这里我以一个通用的方法 $.ajax为例做一个简单的解析,按照下面的模式写好各个参数,就能成功进行Ajax的请求了,可能在实际中使用 $.post...作为Ajax最常用的两种数据提交方式,GETPOST有着自己的特点和适用场景,正确区分GETPOST的不同并根据实际需要进行选用在开发十分重要,简单但是关键! ?...表格拎出关键点: 1.传递数据的方式不同:get是直接把请求数据放在url的后面,是可见的,post请求数据不会显示在url,是不可见的。...需要掌握的常见http状态码大致以下一些: 101:切换协议,服务器根据客户端的请求切换协议 **200:请求成功。...http请求的一个重要关注点就是请求头和响应头的内容,从这两个头文件可以看出很多东西,当我们用发送一个ajax请求的时候,如果没有达到预期的效果,那么就需要打开浏览器的调试工具,NetWork中找到相应的

2.1K30

目前5种最流行的发送HTTP请求的方法

所以,在今天的帖子,我们将讨论用Javascript发送HTTP请求的不同方法。语言提供的本地选项开始,我们将查看以下五个模块,并使用它们发送不同类型的HTTP请求。...此外,与GET请求相比,POST请求还可以触发另一种事件类型。它们是通过xhr访问的上传事件。上传字段。当请求体必须携带大量数据(如图像、文件)时,这些事件处理程序帮助我们跟踪数据上传进度。...在这个实现,我们必须使用响应。ok字段检查响应是否包含HTTP错误,因为在catch方法捕获的错误属于网络级别,而不是应用程序级别。...支持在许多其他可用HTTP不可用的多功能特性集。其中包括拦截HTTP请求、同时发送请求、终止已发送请求、自动JSON数据转换、监控请求进度。...通过支持请求超时、重试和监控进度特性,解决了本机Fetch API的一些限制。

3.1K20

elasticsearch文档Delete By Query API(一)

对于已执行的删除仍然有效,换句话说,这个过程不会回滚,只会中止。当第一个失败导致中止时,失败的批量请求返回的所有失败信息都将在响应的failures元素给出,因此可能存在相当多的失败实体。...如果只是想计算版本冲突而不是让它们中止,那么可以设置在URL添加conflicts=proceed参数,或者在请求设置 "conflicts":"proceed"。...开发者可以将 _delete_by_query限制为单一类型,例如如下请求,将会 twitter索引删除 _doc类型的文档: curl -X POST "localhost:9200/twitter...2.6 requestspersecond requestspersecond可以被设置为任何正十进制数(1.4,6, 1000),通过该参数可以限制 delete-by-query发出的每秒请求数量...好了,本文先说到这里,问题欢迎留言讨论。

4.6K10

Node核心模块篇:HTTP

然而抛开这些框架,我们是否又对Node.js的核心模块及底层一个清晰和深刻的认识呢?本系列文章将会与各位一起重新了解学习Node.js的各个核心模块。 ?...用于处理客户端请求,是一个事件发射器。可通过其内部方法进行中止请求、完成请求、设置超时、发送数据块等等操作。...Class: http.Server 服务器对象,监听了客户端请求、建立连接、服务器关闭等等在内的多个事件,可通过其方法设置服务器超时、监听指定端口和主机、关闭服务器。...http.get(options[,callback]) get请求便捷方法,也就是 http.request() 方法的特例。...客户端,通过 http.request 方法向之前创建好的服务器发送POST请求请求的地址为'/http',发送给服务器‘this is client request.’字符串,并接受服务器返回的状态码

60631

读Zepto源码之Ajax模块

type: HTTP 请求的类型; url: 请求的路径; data: 请求参数; processData: 是否需要将非 GET 请求的参数转换成字符串,默认为 true ,即默认转换成字符串; contentType...GET 请求,默认为 false; username:需要认证的 HTTP 请求的用户名; password: 需要认证的 HTTP 请求的密码; dataFilter: 对响应数据进行过滤; xhr...status 为 0 时,表示请求并没有到达服务器,几种情况会造成 status 为 0 的情况,例如网络不通,不合法的跨域请求,防火墙拦截。..., arguments) options.type = 'POST' return $.ajax(options) } $.post 是 $.ajax POST 请求的便捷方法,跟 $.get...一样,只开放了 url、data 、success 和 dataType 几个接口参数,默认配置了 type 为 POST 请求

3.4K00

curl命令

-G, --get: 使用此选项时,将使用-d、-data、-data binary或-data urlencode指定的所有数据在HTTP GET请求中使用,而不是在其他情况下使用的POST请求,数据将附加到带有...--post301: HTTP,告诉curl遵守rfc2616/10.3.2,在执行301重定向时不要将POST请求转换为GET请求,非RFC行为在web浏览器无处不在,因此curl默认情况下进行转换以保持一致性...--post302: HTTP,告诉curl遵守rfc2616/10.3.2,在执行302重定向时不要将POST请求转换为GET请求,非RFC行为在web浏览器无处不在,因此curl默认情况下进行转换以保持一致性...--post303: HTTP,告诉curl遵守rfc2616/10.3.2,在执行303重定向时不要将POST请求转换为GET请求,非RFC行为在web浏览器无处不在,因此curl默认情况下进行转换以保持一致性...规范,常见的附加HTTP请求包括PUT和DELETE,但WebDAV相关技术提供了PROPFIND、COPY、MOVE等功能,通常你不需要这个选项,各种GET、HEAD、POST和PUT请求都是通过使用专用的命令行选项来调用的

9.1K40

laravel实现简单用户权限的示例代码

后来我选择了字符,基于两点考虑:1 字符浅显易懂,在数据库查找也比较方便 2 我没有按照某个权限查找有这个权限的人的需求,即没有反查需求,使用位,整型都意义不大。...'= ['admin.validate', 'admin.index']]); 这里在基本的制定路由action之后设置了一个permissions的属性,这个属性设计成数组,因为比如一个post请求,...它可能在某个页面会触发,也可能在另外一个页面触发,那么这个post请求就需要同时拥有两个页面路由的权限。...request- route()- getAction()来获取出这个路由的action定义,然后其中的permissions字段获取route.php定义的路由权限。...我将二维数组存储为json,利用laravel的Attribute的get和set方法,完成了数据库json和外界程序逻辑的连接。

95020

计算机网络 — HTTP协议 和 HTTPS

HTTP 请求(Request) 4.1 HTTP 方法 4.1 GET 方法 ① 构造 HTTP GET 请求的情况 ② 使用 Fiddler 观察 GET请求 4.2 POST 方法...(可以不为空) 关于 GET 请求的 URL 长度问题 HTTP 协议由 RFC 2616 标准定义.没有对 URL 的长度任何的限制 4.2 POST 方法 ① 构造 HTTP POST 请求的情况...语义区别: GET 一般用于”获取数据”,POST 一般用于提交数据 幂性: GET 请求一般会设计成”幂”....POST 请求一般不要求设计成”幂”(如果多次请求得到的结果一样, 就视为请求是幂的) 可缓存: GET 请求一般会被缓存 POST 请求一般不能被缓存 4.4 其他相关方法 PUT 与 POST...验证证书是否被篡改: 系统拿到该证书发布机构的公钥, 对签名解密, 得到一个 hash 值(称为数据摘要), 设为 hash1. 然后计算整个证书的 hash 值, 设为 hash2.

81820

渗透测试-如何高效率挖掘漏洞

springboot字典 /env、/actuator/env GET 请求 /env 会直接泄露环境变量、内网地址、配置的用户名信息;当程序员的属性名命名不规范,例如 password 写成 psasword.../refresh、/actuator/refresh POST 请求 /env 接口设置属性后,可同时配合 POST 请求 /refresh 接口刷新属性变量来触发相关 RCE 漏洞。.../restart、/actuator/restart 暴露出此接口的情况较少;可以配合 POST请求 /env 接口设置属性后,再 POST 请求 /restart 接口重启应用来触发相关 RCE 漏洞.../trace、/actuator/httptrace 一些 http 请求包访问跟踪信息,可能在其中发现内网应用系统的一些请求信息详情;以及有效用户或管理员的 cookie信息。...file= 使用字典对可读取文件进行fuzz 敏感信息泄露 通过对某个字段进行置空,回显数据包泄露了大量的手机号、姓名、住址敏感信息 越权漏洞 通过修改post数据包字段的数值,可进行越权操作

1.3K20

Redis 事务

当Redis连接处于MULTI请求的上下文中时,所有命令都将回复字符串QUEUED(Redis协议的角度来看,作为状态回复发送)。排队的命令仅在调用EXEC时安排执行。...例如,命令可能在语法上有误(参数数量错误、命令名称错误),或者可能存在某些关键条件,如内存不足(如果服务器配置了使用maxmemory指令的内存限制)。...•命令可能在调用EXEC之后失败,例如因为我们针对一个键执行了错误的操作(比如对字符串值执行列表操作)。 Redis 2.6.5开始,服务器将在累积命令期间检测错误。...第一次尝试可能是这样的: val = GET mykey val = val + 1 SET mykey $val 只有在我们单个客户端在给定时间内执行操作时,这种方法才能可靠地工作。...简单地说,所有的WATCH调用都会调用开始直到调用EXEC的那一刻,监视键的变化。您还可以向单个WATCH调用发送任意数量的键。 当调用EXEC时,无论事务是否中止,所有键都会被UNWATCH。

8010

.NET HttpWebRequest(请求中止: 未能创建 SSLTLS 安全通道)和(基础连接已经关闭: 发送时发生错误)问题查找解决

然而当我部署到运维给我一个服务器(阿里云服务器)时刚开始提示是请求中止: 未能创建 SSL/TLS 安全通道,之后经过一番修改以后就是提示基础连接已经关闭: 发送时发生错误。...一、自己封装的一个通用的HttpWebRequestHepler Http Web网络请求帮助类: /// /// Http Web网络请求帮助类 /// <...private int _responseCode;//响应状态码 public static HttpWebRequestHepler _ { get..._resContent; } } 二、请求中止: 未能创建 SSL/TLS 安全通道问题解决:   把项目部署到阿里云服务器请求第三方提示请求中止: 未能创建 SSL/...这允许基于 SslStream ((如 FTP、HTTP 和 SMTP) )的 .NET Framework 网络 api 操作系统或系统管理员执行的任何自定义配置继承默认安全协议。

6.7K40
领券