title: Scripting an HTTP header request with netcat
body: <p>I'm trying to play around with netcat to learn more about how HTTP works. I'd like to script some of it in bash or Perl, but I've hit upon a stumbling block early on in my testing.</p>
  
  <p>If I run netcat straight from the prompt and type in a HEAD request, it works and I receive the headers for the web server I'm probing.</p>
  
  <p>This works:  </p>
  
  <pre>    [romandas@localhost ~]$ nc 10.1.1.2 80
      HEAD / HTTP/1.0
  
      HTTP/1.1 200 OK
      MIME-Version: 1.0
      Server: Edited out
      Content-length: 0
      Cache-Control: public
      Expires: Sat, 01 Jan 2050 18:00:00 GMT
  
      [romandas@localhost ~]$</pre>  
  
  <p>But when I put the same information into a text file and feed it to netcat through a pipe or via redirection, in preparation for scripting, it doesn't return the headers.<br>
  The text file consists of the HEAD request and two newlines:  </p>
  
  <pre>HEAD / HTTP/1.0
  
  </pre>
  
  <p>Sending the same information via <strong>echo</strong> or <strong>printf</strong> doesn't work either.</p>
  
  <pre>$ printf "HEAD / HTTP/1.0\r\n"; |nc -n 10.1.1.2 80
  $ /bin/echo -ne 'HEAD / HTTP/1.0\n\n' |nc 10.1.1.2 80</pre>
  
  <p>Any ideas what I'm doing wrong? Not sure if it's a bash problem, an echo problem, or a netcat problem.  </p>
  
  <p>I checked the traffic via Wireshark, and the successful request (manually typed) sends the trailing newline in a second packet, whereas the echo, printf, and text file methods keep the newline in the same packet, but I'm not sure what causes this behavior.</p>