我们能否唯一地标识从POST方法发送响应的请求?

2024-09-26 17:51:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在开发一个异步的web服务。在我的客户机代码中,我使用一个boto3 session client来调用Jetty服务器的GETAPI,这是一个类似S3的服务。获取API从S3获取原始数据并修改请求,以便能够将请求转发到flask服务器。PythonFlask然后处理请求(在这里完成数据转换),并调用Jetty服务器的POST API

现在我一直在琢磨如何回应最初的来电者?因为我不确定API请求是否可以有会话id来标识原始调用方

我的POST API如何回复客户?以下是我试图实现的总体概念。我怎么做

enter image description here


Tags: 代码服务器clientapiwebflask原始数据客户机
1条回答
网友
1楼 · 发布于 2024-09-26 17:51:14

因为我使用的是嵌入式Jetty,所以我使用了内置的org.eclipse.jetty.server.HttpChannel.Listener

我现在可以访问原始的内部Jetty org.eclipse.jetty.server.Request对象,该对象具有该请求的HTTP字段

要使用它,我将创建该HttpChannel.Listener的一个实例,并将其作为bean添加到我的连接器中

public class RequestChannelListener implements HttpChannel.Listener {
    @Override
    public void onRequestBegin(Request request) {
        HttpFields.Mutable replacement = HttpFields.build(request.getHttpFields())
                .put("X-Request-ID", UUID.randomUUID().toString().toUpperCase());
        request.setHttpFields(replacement);
    }
}

在连接器中添加为bean-

RequestChannelListener channelListener = new RequestChannelListener();
connector.addBean(channelListener);

然后,该请求的所有其他访问,无论是Jetty的内部组件、webapp、特定servlet、过滤器、转发、包含、servlet规范中的错误处理、servlet上下文之外的错误处理,等等,都可以看到它

要检查自定义标头是否已添加到请求中,请执行以下操作:

Enumeration<String> headerNames = request.getHeaderNames();
        while(headerNames.hasMoreElements()) {
            String headerName = headerNames.nextElement();
            System.out.println("Header Name - " + headerName + ", Value - " + request.getHeader(headerName));
        }

相关问题 更多 >

    热门问题