Re: Help needed with constructing a HTTP message !!

	Thijs,

		Start by reading RFC 1867 to get an explanation of the
	headers required.  Don't miss the fact that the boundary is
specified
	once in the Content-type, then used with '--' in front of it, then
used again
	with '--' in front AND '--' behind it.

		Content-length is the entire length of the body, (header
lines and all)
	basically everything after the \r\n\r\n.

		Now the body in a multipart message consists of a header and
body
	itself.  The contents of the file go after the \r\n\r\n of the
header portion.  Those
	header lines should describe the Content-type as some binary format,
like
	image/gif or whatever.  

		The RFC should help clarify this more.  Be sure to read it.


	Fred Bohle
	NEON Systems, Inc.



	From:	nl89071@nl.ibm.com on 04/04/2001 01:52 PM
	To:	www-talk@w3.org@SMTP@Exchange
	cc:	 

	Subject:	Help needed with constructing a HTTP message !!



	Hi www-talk,


	I am currently working on an application (in C++) which needs to
send one
	HTTP message to a HTTP server (apache)
	The message I am sending is a POST which uploads a file to the
server.
	Because I only need to send this one message I donīt want to use any
HTTP
	classes for it, I just want to sent the HTTP message over a plain
socket.

	Currently I am sending the message as follows :

	I open a socket to the server.
	I read the file which has to be sent.
	I (want to) construct the HTTP message
	send it to the server.

	I have used a port sniffer to find out how IE or Netscape sends it
POST
	message to an apache server.
	Below is a captureprint of a file sent to Apache.

	When I telnet into the Apache server over its HTTP port, I cant get
the
	server to reply with the "file is sent OK" message, it always sends
"upload
	failed".
	I copied and pasted the capture below into my telnet window. When I
send a
	text file this way it goes fine, the server replies with "file is
sent OK",
	but when I try to send binary files nothing works, the server keeps
	replying with "upload failed".

	I really would like some help on this.

	The things I would like to know are the following:

	- How do I exactly determine the content-length (The RFC2616 is very
	confusing) of my HTTP message. ( I mean which lines are part of the
header
	and which are not)
	- How are binary files put into the HTTP message. (My sniffer
returns them
	as ASCII chars !?)
	- How are the end-of-lines implemented. (When I use \r\n as
end-of-line
	marker the server also replies with failed, aswell as text as binary
	files). When I dont paste the \r\n into the telnet when i am posting
a text
	file it uploads fine.

	With kind regards,

	Thijs Volders.

	------------------------------
	This is the capture done when IE sends a binary file to the server.
	everything goes fine.
	The "c:" is the reaction from the client, "s:" it the reply from the
	server.
	When I copy/paste this in the telnet window it is not sent
correctly!.

	Connection trace between 9.168.121.188 (client) and 10.128.127.176
(server)
	port 80
	Trace start at Wed Mar 28 16:35:32 GMT+02:00 2001

	c:POST http://10.128.127.176/send2.php HTTP/1.0\r\n
	c:Accept: application/vnd.ms-powerpoint, application/vnd.ms-excel,
applic
	c:ation/msword, image/gif, image/x-xbitmap, image/jpeg, image/pjpeg,
*/*\r
	c:\n
	c:Referer: http://10.128.127.176/upload2.html\r\n
	c:Accept-Language: nl\r\n
	c:Content-Type: multipart/form-data;
boundary=---------------------------
	c:7d11420bf8\r\n
	c:Accept-Encoding: gzip, deflate\r\n
	c:User-Agent: Mozilla/4.0 (compatible; MSIE 5.0; Windows 98;
DigExt)\r\n
	c:Host: 10.128.127.176\r\n
	c:Content-Length: 343\r\n
	c:Proxy-Connection: Keep-Alive\r\n
	c:Pragma: no-cache\r\n\r\n
	c:-----------------------------7d11420bf8\r\n
	c:Content-Disposition: form-data; name="MAX_FILE_SIZE"\r\n\r\n
	c:8000000\r\n
	c:-----------------------------7d11420bf8\r\n
	c:Content-Disposition: form-data; name="userfile";
filename="C:\\tmp\\N.t
	c:xt.gz"\r\n
	c:Content-Type: application/x-gzip-compressed\r\n\r\n\1F\8B\b\b\1E
	c:]\C2:\00\03N.txt\00\CB\00\00\E7\06k\91\01\00\00\00\r\n
	c:-----------------------------7d11420bf8--\r\n

	s:HTTP/1.1 200 OK\r\n
	s:Date: Wed, 28 Mar 2001 14:35:03 GMT\r\n
	s:Server: Apache/1.3.19 (Unix) PHP/4.0.4pl1 mod_ssl/2.8.1
OpenSSL/0.9.6\r
	s:\n
	s:X-Powered-By: PHP/4.0.4pl1\r\n
	s:Connection: close\r\n
	s:Content-Type: text/html\r\n\r\n
	s:<HTML><HEAD><TITLE>Send</TITLE>\r\n
	s:<BODY>\r\n\r\n
	s:File transmission initiated from 9.168.121.188 on port
1290.<BR>File re
	s:ceived by the server, and stored at /tmp/N.txt.gz<BR>Ok<BR>\r\n
	s:</BODY></HTML>\r\n

Received on Wednesday, 4 April 2001 15:59:04 UTC