apache - 在 Apache HttpClient 中使用 HttpRequestInterceptor 操作请求实体

标签 apache apache-httpclient-4.x

HttpRequest 没有 Request 实体的 getter,无法让我在拦截器中操作它。使用instanceof 检查类型也不起作用。有人对我如何实现这一目标有任何想法吗?

public class FastinfosetRequestInterceptor implements HttpRequestInterceptor 
{

@Override
public void process(HttpRequest request, HttpContext context)
        throws HttpException, IOException 
{
    if(request instanceof HttpPost)
    {
        HttpEntity rqEntity = ((HttpPost)request).getEntity();
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        rqEntity.writeTo(baos);
        byte[] encodedRq;
        try 
        {
            encodedRq = FastInfosetUtils.encodeToFastInfoSet(baos.toByteArray());
        } 
        catch (ParserConfigurationException | SAXException
                | TransformerException e) 
        {
            throw new IOException("Error while encoding request to FastInfoSet", e);
        }
        ((HttpPost) request).setEntity(new ByteArrayEntity(encodedRq));
    }
}
}

最佳答案

这应该可以解决问题

if(request instanceof HttpEntityEnclosingRequest)
{
    HttpEntity rqEntity = ((HttpEntityEnclosingRequest) request).getEntity();

关于apache - 在 Apache HttpClient 中使用 HttpRequestInterceptor 操作请求实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517074/

相关文章:

apache - apache 的 www-root 中的文件是否必须由沙箱中的 root 用户拥有?

java - http 客户端 4.3 不发送凭据

java - 如何以流的形式获取httpclient响应

java - 如何在 Java 中将 http 响应捕获为 Json 对象

apache - 为多域生成 CSR

java - 如何配置 tomcat 为单个应用程序中的不同端点使用不同的端口?

java - 使用 Apache HTTP 客户端将 Tomcat Web 应用程序的 keystore 放在哪里

java - 如何从 HTML 文件添加或调用 java 代码?

php - 如何在运行 ubuntu 的 amazon ec2 中启用 .htaccess

python - apache+mod_wsgi下的cx_Oracle 5.1.1