Java 非标准HTTP方法和Apache HTTP组件

Java 非标准HTTP方法和Apache HTTP组件,java,http,apache-httpcomponents,Java,Http,Apache Httpcomponents,我正在使用(Java)的HttpCore库编写HTTP服务器。我的服务器必须能够接收具有非标准HTTP方法(GET、POST、DELETE等以外的方法)的请求 但当我的服务器收到这样的请求时,它会返回一个“不支持方法”响应。有没有办法强制HTTPComponents接受非标准HTTP方法 背景:我正在努力实现一个WebDAV服务器,它使用非标准方法(如MKCOL和PROPFIND)。我找到了解决方案,因此我将回答自己的问题。xD 您必须创建自己的HttpRequestFactory实现,并将其向

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

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


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

我找到了解决方案,因此我将回答自己的问题。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)
HttpRequestFactory reqFact=new-HttpRequestFactory(){
公共HttpRequest newHttpRequest(最终请求行请求行)抛出MethodNotSupportedException{
返回新的BasicHttpEntityEnclosingRequest(requestline);
}
公共HttpRequest newHttpRequest(最终字符串方法,最终字符串uri)抛出MethodNotSupportedException{
返回新的BasicHttpEntityEnclosingRequest(方法,uri);
}
};
HttpMessageParserFactory parserFact=新的默认HttpRequestParserFactory(null,reqFact);
HttpConnectionFactory connFact=新的默认bHttpServerConnectionFactory(null,parserFact,null)
如果找到非标准HTTP方法,HttpComponents默认使用的实现将抛出
MethodNotSupportedException
。默认实现的源代码可在此处找到:


您使用的是哪个版本的HTTPComponents库?v4+在处理WebDAV之类的自定义实现方面做得更好。看起来apache已经介绍过了,找到了jackrabbit项目,但我没有使用它,但它看起来是一个很好的开始looking@r3mus对不起,忘记包含版本了。我使用的是HttpCore的4.3版。我不是在寻找WebDAV实现。我在写我自己的作品,这是一个私人项目。我可能是误解了。您是将HttpComponents用作客户端还是服务器?不,我知道了——显然4+可以处理它。但是那只小野兔看起来也很圆滑,可以帮你省点麻烦。