我正在使用Apache HTTPComponents 4.3(Java)的HttpCore库编写HTTP服务器。我的服务器必须能够接收具有非标准HTTP方法的请求(GET,POST,DELETE等以外的方法)。
但是当我的服务器收到这样的请求时,它会返回“不支持的方法”响应。有没有办法强制HTTPComponents接受非标准HTTP方法?
背景:我正在开发一个WebDAV服务器,它使用非标准方法(如MKCOL和PROPFIND)。
由于
答案 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
。可以在此处找到默认实现的源代码: