1   /*
2    * ====================================================================
3    *
4    *  Licensed to the Apache Software Foundation (ASF) under one or more
5    *  contributor license agreements.  See the NOTICE file distributed with
6    *  this work for additional information regarding copyright ownership.
7    *  The ASF licenses this file to You under the Apache License, Version 2.0
8    *  (the "License"); you may not use this file except in compliance with
9    *  the License.  You may obtain a copy of the License at
10   *
11   *      http://www.apache.org/licenses/LICENSE-2.0
12   *
13   *  Unless required by applicable law or agreed to in writing, software
14   *  distributed under the License is distributed on an "AS IS" BASIS,
15   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16   *  See the License for the specific language governing permissions and
17   *  limitations under the License.
18   * ====================================================================
19   *
20   * This software consists of voluntary contributions made by many
21   * individuals on behalf of the Apache Software Foundation.  For more
22   * information on the Apache Software Foundation, please see
23   * <http://www.apache.org/>.
24   *
25   * [Additional notices, if required by prior licensing conditions]
26   *
27   */
28  package org.apache.commons.httpclient;
29  
30  import java.io.IOException;
31  import org.apache.commons.httpclient.methods.PostMethod;
32  
33  /***
34   * HTTP POST methid intended to simulate side-effects of 
35   * interaction with non-compiant HTTP servers or proxies
36   * 
37   * @author Oleg Kalnichevski
38   */
39  
40  public class NoncompliantPostMethod extends PostMethod {
41  
42      public NoncompliantPostMethod(){
43          super();
44      }
45  
46      public NoncompliantPostMethod(String uri) {
47          super(uri);
48      }
49  
50      /***
51       * NoncompliantPostMethod class skips "Expect: 100-continue"
52       * header when sending request headers to an HTTP server.
53       * 
54       * <p>
55       * That makes the server expect the request body to follow 
56       * immediately after the request head. The HTTP server does not 
57       * send status code 100 expected by the client. The client should 
58       * be able to recover gracefully by sending the request body 
59       * after a defined timeout without having received "continue"
60       * code.
61       * </p>
62       */
63      protected void writeRequestHeaders(HttpState state, HttpConnection conn)
64          throws IOException, HttpException {
65          addRequestHeaders(state, conn);
66          Header[] headers = getRequestHeaders();
67          for (int i = 0; i < headers.length; i++) {
68              Header header = headers[i];
69              // Write all the headers but "Expect"
70              if (!header.getName().equalsIgnoreCase("Expect") ) {
71                  conn.print(header.toExternalForm(), "US-ASCII");
72              }
73          }
74      }
75  
76  }