Front page | perl.vmsperl |
Postings from January 2002
RE: LWP/HTTP Content-Length Calculation Error
Thread Previous
|
Thread Next
From:
Kokosa, Chris
Date:
January 15, 2002 00:02
Subject:
RE: LWP/HTTP Content-Length Calculation Error
Message ID:
8CE5617ED444D411BDF800508BDF0BEE09733C26@usahm015.exmi01.exch.eds.com
Setting the file attributes to stream did the trick!
BEFORE (wrong content-length calculated):
Record format: Fixed length 512 byte records
AFTER (correct content-length):
Record format: Stream_LF, maximum 512 bytes, longest 512 bytes
Installing version 5.63 of libwww didn't seem to make a difference, but I
did have some errors when performing the 'make test'.
Thanks for the help.
> -----Original Message-----
> From: Craig A. Berry [mailto:craigberry@mac.com]
> Sent: Tuesday, January 15, 2002 12:51 AM
> To: Kokosa, Chris
> Cc: 'vmsperl@perl.org'
> Subject: Re: LWP/HTTP Content-Length Calculation Error
>
>
> At 10:54 PM -0500 1/14/02, Kokosa, Chris wrote:
> > When I run the script on Win32 it
> >runs fine. When I run the app on VMS the web server replies
> with a "500
> >length of data sent did not match calculated Content-Length
> header..."
> >
> >Is the content-length calculation wrong or is it a
> difference between OSs?
>
> This could be a variant of the "what is the VMS file size *really*"
> question that apparently caused Linus himself to make a derogatory
> remark about VMS. This has been discussed many times on comp.os.vms
> and might even be in the OpenVMS FAQ, but I'll try to summarize from
> a Perl perspective.
>
> A quick look suggests that the request() method uses the st_size
> field of the stat buffer to set up content length. Perl's stat() is
> based closely on what the C library gives us, and the docs to this
> routine say, "If the file is a record file, the st_size field
> includes carriage-control information. Consequently, the st_size
> value will not correspond to the number of characters that can be
> read from the file. "
>
> In other words, the size of the file depends on what kind of file it
> is. Do DIRECTORY/FULL on the file in question and look at the record
> format field; if it doesn't begin with "Stream" then you've probably
> got a record file in which formatting information occupies space on
> disk but does not count in what goes on the wire when you read and
> transmit the data in the file.
>
> Try (assuming your file is named foo.dat):
>
> $ set file foo.dat/attributes=rfm:stmlf
>
> and see if the upload works.
>
> We should probably fix up LWP, specifically (I think)
> lib/LWP/Protocol/file.pm, so that record files get their data counted
> properly. In the meantime, does LWP give you any way to explicitly
> specify the content-length yourself? If so, you could slurp the
> whole file into a variable and just do a length() on it if it's a
> small file, and if it's not small do a length() on each record and
> keep a total.
>
> BTW, you might well have the same problem in C (or DCL for that
> matter) as in Perl.
>
>
> --
> ____________________________________________
> Craig A. Berry
> mailto:craigberry@mac.com
>
> "Literary critics usually know what they're
> talking about. Even if they're wrong."
> -- Perl creator Larry Wall
>
Thread Previous
|
Thread Next