请求以Http / 0.9版本发送

时间:2012-10-29 21:23:15

标签: java http apache-commons-httpclient

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

在Post请求之后获取请求行为HTTP / 0.9:

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

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

我尝试使用HttpMethodParams显式设置HTTP版本,但这没有帮助。 有没有人知道可能出现什么问题?

    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();

1 个答案:

答案 0 :(得分:6)

感谢Joachim Sauer。我弄清楚了问题。

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

Http / 0.9和Http / 1.0或其他更高协议之间的差异是0.9有一个简单的请求线'METHOD URL'。更高版本还在请求行'METHOD URL HTTPVERSION'中包含Http版本。

希望能节省一天的时间!