From 96118961d0e1a61c8f1e99b6afc4375856f3ac93 Mon Sep 17 00:00:00 2001 From: Filipe David Manana Date: Tue, 16 Nov 2010 20:49:49 +0000 Subject: [PATCH] Two changes: 1) Set Content-Length to 0 for empty PUT and POST requests (necessary for some proxies); 2) Use iolist_size/1 instead of size/1 or length/1 because the body can be an iolist --- src/ibrowse_http_client.erl | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/src/ibrowse_http_client.erl b/src/ibrowse_http_client.erl index 5c3d5c9..0eb6210 100644 --- a/src/ibrowse_http_client.erl +++ b/src/ibrowse_http_client.erl @@ -831,17 +831,13 @@ make_request(Method, Headers, AbsPath, RelPath, Body, Options, Headers_0 = [Fun1(X) || X <- Headers], Headers_1 = case lists:keysearch("content-length", 1, Headers_0) of - false when (Body == []) orelse - (Body == <<>>) orelse - is_tuple(Body) orelse - is_function(Body) -> - Headers_0; - false when is_binary(Body) -> - [{"content-length", "content-length", integer_to_list(size(Body))} | Headers_0]; - false when is_list(Body) -> - [{"content-length", "content-length", integer_to_list(length(Body))} | Headers_0]; + false when (Body == [] orelse Body == <<>>) andalso + (Method == post orelse Method == put) -> + [{"content-length", "Content-Length", "0"} | Headers_0]; + false when is_binary(Body) orelse is_list(Body) -> + [{"content-length", "Content-Length", integer_to_list(iolist_size(Body))} | Headers_0]; _ -> - %% Content-Length is already specified + %% Content-Length is already specified or Body is a function or function/state pair Headers_0 end, {Headers_2, Body_1} =