2

我正在使用 Apache Commons HttpClient v3.1。我的所有请求在请求行中都有正确的(默认)HTTP 版本,即 HTTP/1.1,除了 1 个请求。

以下 Post 请求将 requestline 获取为 HTTP/0.9:

server : port/cas/v1/tickets/TGT-1-sUqenNbqUzvkGSWW25lcbaJc0OEcJ6wg5DOj3XDMSwoIBf6s7i-cas-1
Body: service=*

我通过 http 客户端代码进行了调试,看到请求行设置为 HTTP/1.1,但在服务器上,我看到请求以 HTTP/0.9 的形式出现。

我尝试使用 显式设置 HTTP 版本,HttpMethodParams但这无济于事。有谁知道可能出了什么问题?

    HttpClient client = new HttpClient();
    HostConfiguration hc = client.getHostConfiguration();
    hc.setHost(new URI(url, false));

    PostMethod method = new PostMethod();
    method.setURI(new URI(url, false));

    method.getParams().setUriCharset("UTF-8");
    method.getParams().setHttpElementCharset("UTF-8");
    method.getParams().setContentCharset("UTF-8");
    method.getParams().setVersion(HttpVersion.HTTP_1_1);
    method.addParameter("service", URLEncoder.encode(service, "UTF-8"));
    method.setPath(contextPath + "/tickets/" + tgt);

    String  respBody = null;
    int statusCode = client.executeMethod(method);
    respBody = method.getResponseBodyAsString();
4

1 回答 1

6

谢谢约阿希姆绍尔。我能够找出问题所在。

我使用 Webscarab 作为 Web 代理,它发出以下消息“有一个延续标题,但没有前一个标题行”。上网查了一下,发现问题出在多行requestline。我将 HTTP 版本明确设置为 1.1,但是 url 中有一个尾随的 '\r\n',这使得请求行看起来像 Http/0.9。

Http/0.9 和 Http/1.0 或其他更高协议之间的区别在于 0.9 有一个简单的请求行“METHOD URL”。更高版本还在请求行“METHOD URL HTTPVERSION”中包含 Http 版本。

希望它能拯救某人的一天!

于 2012-11-01T14:07:02.160 回答