Jean-Marc,

What are you comparing it to in order to determine accuracy? If you're
looking at the "on-the-wire" size (e.g. through a packet capture,
router/switch/interface counters, etc), then that will be counting
Ethernet, IP, TCP and potentially other headers too. The size of such
headers is not predictable, and applications (including HttpClient)
have no way to access them.

If you want accurate byte counts from the application layer (HTTP
request line + HTTP headers + body), then you could explore wrapping
the SocketInputStream / SocketOutputStream to provide a simple byte
counter. I haven't explored how easy/hard this is in HttpClient, and
it may be that there's a cleaner way to do it that I'm not aware of.

Counting the length of the returned Entity (do not rely on the
Content-Length header, that will not always be there) and adding
calculated header lengths (like Ryan suggested) should give you
figures that are close to the true figures for many sites. Note that
compressed content will cause you problems, as the Entity will provide
you the uncompressed length.

Thanks,

Sam


On 8 August 2012 15:19, Jean-Marc Spaggiari <[email protected]> wrote:
> Hi Ryan,
>
> This will calculate the header size. But is there anything else? Is
> the size only headers + URL lenght for the request, and
> headers+respons body for the respons? Is there any other CRC,
> validation, packet, etc.?
>
> Because headersize + body lenght seems to not be accurate :(
>
> 2012/8/8, Ryan Smith <[email protected]>:
>> If HttpClient has a method to do this, can someone let me know?  This is a
>> method I wrote to calculate header size:
>>
>> public static int getHeaderByteSize(Header[] headers) {
>> int requestHeaderByteSize = 0;
>> for (Header requestHeader : headers) {
>> if (requestHeader.getName() != null) {
>> requestHeaderByteSize += requestHeader.getName().getBytes().length;
>> }
>> if (requestHeader.getValue() != null) {
>> requestHeaderByteSize += requestHeader.getValue().getBytes().length;
>> }
>> }
>> return requestHeaderByteSize;
>> }
>>
>> On Wed, Aug 8, 2012 at 10:07 AM, Jean-Marc Spaggiari <
>> [email protected]> wrote:
>>
>>> Hi,
>>>
>>> Is there a good way to calculate the bandwidth used by a request?
>>>
>>> I'm doing a get and I try to track the upload and download bandwidth
>>> used.
>>>
>>> So for a get, there is some upload to the server. There is the URL,
>>> and the headers. But seems there is a bit more than that and I'm not
>>> able to figure what.
>>>
>>> When I get the respons, I'm using getHeaders("Content-Length") to get
>>> the content lenght. But I'm most probably missing the header size. I
>>> also tried EntityUtils.toString(entity).length() but none of them
>>> seems to be accurate.
>>>
>>> So I'm wondering is there is a good way to calculate the bandwidth
>>> used for upload and download?
>>>
>>> Thanks,
>>>
>>> JM
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: [email protected]
>>> For additional commands, e-mail: [email protected]
>>>
>>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to