非标准HTTP方法和Apache Http组件

时间:2013-12-08 22:33:15

标签: java apache http apache-httpcomponents

我正在使用Apache HTTPComponents 4.3(Java)的HttpCore库编写HTTP服务器。我的服务器必须能够接收具有非标准HTTP方法的请求(GET,POST,DELETE等以外的方法)。

但是当我的服务器收到这样的请求时,它会返回“不支持的方法”响应。有没有办法强制HTTPComponents接受非标准HTTP方法?

背景:我正在开发一个WebDAV服务器,它使用非标准方法(如MKCOL和PROPFIND)。

由于

1 个答案:

答案 0 :(得分:2)

我找到了解决方案,所以我将回答我自己的问题。的xD

您必须创建自己的HttpRequestFactory实施,并将其传递给链。

HttpRequestFactory reqFact = new HttpRequestFactory() {
  public HttpRequest newHttpRequest(final RequestLine requestline) throws MethodNotSupportedException {
    return new BasicHttpEntityEnclosingRequest(requestline);
  }

  public HttpRequest newHttpRequest(final String method, final String uri) throws MethodNotSupportedException {
    return new BasicHttpEntityEnclosingRequest(method, uri);
  }
};
HttpMessageParserFactory<HttpRequest> parserFact = new DefaultHttpRequestParserFactory(null, reqFact);
HttpConnectionFactory<DefaultBHttpServerConnection> connFact = new DefaultBHttpServerConnectionFactory(null, parserFact, null)

如果找到非标准HTTP方法,HttpComponents默认使用的实现会抛出MethodNotSupportedException。可以在此处找到默认实现的源代码:

http://hc.apache.org/httpcomponents-core-4.3.x/httpcore/xref/org/apache/http/impl/DefaultHttpRequestFactory.html