tags:

views:

1045

answers:

1

I am trying to POST a HTML (contained in a file) to a URL using Wget like this:

wget -O- --debug
     --header=Content-Type:text/html
     --post-file=index.html
     http://localhost/www/encoder.ashx

The URL to which the HTML is being posted is a Web application end-point implemented using ASP.NET. The server replies with a 100 (Continue) response and Wget simply stops dead in its tracks rather than continuing with the real response that should follow next.

Can Wget be somehow told to hanlde a 100 (Continue) response or is this some well-known limitation of the tool?

Notes:

  • I noticed that Wget never sends the Expect: 100-Continue header so technically the server should not be issuing a 100 (Continue) response.

    UPDATE: Looks like this is possible, as per §8.2.3 of RFC 2616 (Hypertext Transfer Protocol -- HTTP/1.1):

    An origin server SHOULD NOT send a 100 (Continue) response if the request message does not include an Expect request-header field with the "100-continue" expectation, and MUST NOT send a 100 (Continue) response if such a request comes from an HTTP/1.0 (or earlier) client. There is an exception to this rule: for compatibility with RFC 2068, a server MAY send a 100 (Continue) status in response to an HTTP/1.1 PUT or POST request that does not include an Expect request-header field with the "100- continue" expectation. This exception, the purpose of which is to minimize any client processing delays associated with an undeclared wait for 100 (Continue) status, applies only to HTTP/1.1 requests, and not to requests with any other HTTP- version value.

  • cURL has no problems with such a transaction. It send an Expect: 100-Continue header and continued with 100 (Continue) response on to the real one.

For more information, here is the full debug trace of the transaction from the invocation shown above:

Setting --post-file (postfile) to index.html
Setting --header (header) to Content-Type:text/html
DEBUG output created by Wget 1.10 on Windows.

--13:29:17--  http://localhost/www/encoder.ashx
           => `-'
Resolving localhost... seconds 0.00, 127.0.0.1
Caching localhost => 127.0.0.1
Connecting to localhost|127.0.0.1|:80... seconds 0.00, connected.
Created socket 296.
Releasing 0x01621a10 (new refcount 1).

---request begin---
POST /www/encoder.ashx HTTP/1.0
User-Agent: Wget/1.10
Accept: */*
Host: localhost
Connection: Keep-Alive
Content-Type: text/html
Content-Length: 30984

---request end---
[writing POST file index.html ... done]
HTTP request sent, awaiting response...
---response begin---
HTTP/1.1 100 Continue
Server: ASP.NET Development Server/9.0.0.0
Date: Wed, 24 Sep 2008 11:29:17 GMT
Content-Length: 0

---response end---
100 Continue
Closed fd 296
13:29:17 ERROR 100: Continue.
+1  A: 

I looked at the source code to wget for Windows, and as far as I can tell the debug output is coming from the generic error condition when wget fails to parse the response properly. Looks like this is just a limitation of wget, so you'll probably have to use curl or some other method to avoid encountering this issue.

Jay