【问题标题】:Non-standard HTTP methods and Apache Http Components非标准 HTTP 方法和 Apache Http 组件
【发布时间】:2013-12-25 22:32:04
【问题描述】:

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

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

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

【问题讨论】:

  • 您使用的是哪个版本的 HTTPComponents 库? v4+ 更擅长处理 WebDAV 等自定义实现。
  • 看起来 apache 已经覆盖了你,找到了 jackrabbit 项目 jackrabbit.apache.org 我没有使用它,但它看起来是一个不错的开始
  • @r3mus 抱歉,忘记包含版本。我正在使用 4.3 版的 HttpCore。而且我不是在寻找 WebDAV 实现。我正在编写自己的个人项目。
  • 我可能误会了。你是使用 HttpComponents 作为客户端还是服务器?
  • 不,我明白了——显然 4+ 可以处理它。不过那个长耳兔看起来也很漂亮,会省点麻烦的。

标签: java http apache-httpcomponents


【解决方案1】:

我找到了解决方案,所以我将回答我自己的问题。 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

【讨论】:

    猜你喜欢
    • 2012-03-08
    • 1970-01-01
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多