[REBOL] Re: POST examples ...
From: gjones05:mail:orion at: 4-Jun-2001 13:06
From "Scott Jones"
SJ> > insert http-port http-request
SJ> > ;now grabbing header stuff 1 byte at a time
SJ> > ;so that we can get content length
SJ> > ;look for two newlines in a row
SJ> > data: make string! 1000
SJ> > while [not parse/all data [to "^/^/" to end]][
SJ> > append data copy/part http-port 1
SJ> > ]
From: "Petr Krenzelok"
> .. pressed for the time. I can understand most parts of the script,
> above lines correct? So you run 'while loop containing 'parse. What do
> do if string like "asdfasf^/^/ something else" arrives to your port?
> you sure that by reading out 1 byte from the port you will get whole
> till ^/^/ is reached?
The logic I used was based on the fact that the header info is separated
from the content by (a minimum of) 2 CRLFs (by http specification as I
recall). What my hacked example does not take into account are error
conditions, which could well occur. I guess the loop could check for
content header length (meaning it missed the two newline
characters for what ever reason). It's hard to imagine a header being
longer than a few hundred bytes, so I guess it could check to be sure
the length doesn't exceed some reasonable default. I just realized that
the "^/^/" could represent different things on different platforms, but
the specification uses the CRLFCRLF sequence as the separator of header
from content. I only let it read one byte at a time so as to not
overshoot the sequence. I guess one could just read an arbitrary length
the first time through, parse this data for header, then let the rest
(the first part of the content) be parsed off to the content.
> Thanks anyway - will try it at my work tomorrow ...
> > Hope this one helps *and* solve the problem.
> I already solved it :-) Well, the only one problem is 'read needs lots
> memory, but it works :-) Right now I just want to get more familiar
> POST method, so I am asking questions you are answering in a great
I am sorry that I misunderstood that you *had* already solved it. I
thought the code you posted showed the nice way that you constructed the
parameters for a POST operation. I thought you were still wishing for a
way to know the length and download either in portions and/or download
only a specific portion. I used Martin J's code and method, mainly for
speed, because all I had to do was change the parts that managed the
port and getting header/length stuff. I posted this most recent code as
a way of showing how to manage the port. I meant no slight to you, of
course. Sorry. The way I outlined should avoid any significant memory
problems, but performance could be improved for large files by picking a
larger length. The size of the minimal hard disk storage unit would be
the minimal ideal (is it a sector or a cluster; I have forgotten).