Comparison

util/httpstream.lua @ 3567:94828fb2dab8

util.httpstream: Don't attempt to read response body for HEAD requests, or when status code indicates no body is present.
author Waqas Hussain <waqas20@gmail.com>
date Sat, 06 Nov 2010 01:58:46 +0500
parent 3566:75d287daad16
child 3568:51d5578965a5
comparison
equal deleted inserted replaced
3566:75d287daad16 3567:94828fb2dab8
69 local httpversion, status_code, reason_phrase = status_line:match("^HTTP/(%S+)%s+(%d%d%d)%s+(.*)$"); 69 local httpversion, status_code, reason_phrase = status_line:match("^HTTP/(%S+)%s+(%d%d%d)%s+(.*)$");
70 if not httpversion then coroutine.yield("invalid-status-line"); end 70 if not httpversion then coroutine.yield("invalid-status-line"); end
71 local headers = readheaders(); 71 local headers = readheaders();
72 72
73 -- read body 73 -- read body
74 local have_body = not
75 ( (options_cb and options_cb().method == "HEAD")
76 or (status_code == 204 or status_code == 304 or status_code == 301)
77 or (status_code >= 100 and status_code < 200) );
78
74 local body; 79 local body;
75 local len = tonumber(headers["content-length"]); 80 if have_body then
76 if len then -- TODO check for invalid len 81 local len = tonumber(headers["content-length"]);
77 body = readlength(len); 82 if len then -- TODO check for invalid len
78 else -- read to end 83 body = readlength(len);
79 repeat 84 else -- read to end
80 local newdata = coroutine.yield(); 85 repeat
81 data = data..newdata; 86 local newdata = coroutine.yield();
82 until newdata == ""; 87 data = data..newdata;
83 body, data = data, ""; 88 until newdata == "";
89 body, data = data, "";
90 end
84 end 91 end
85 92
86 success_cb({ 93 success_cb({
87 code = status_code; 94 code = status_code;
88 responseversion = httpversion; 95 responseversion = httpversion;