Parent

Files

HTTP::Message::Headers

Represents HTTP message header.

Constants

STATUS_CODE_MAP

HTTP response status code to reason phrase mapping definition.

CHARSET_MAP

$KCODE to charset mapping definition.

NIL_URI

Placeholder URI object for nil uri.

Attributes

http_version[RW]

HTTP version in a HTTP header. Float.

body_size[R]

Size of body. nil when size is unknown (e.g. chunked response).

chunked[RW]

Request/Response is chunked or not.

request_method[R]

Request only. Requested method.

request_uri[RW]

Request only. Requested URI.

request_query[RW]

Request only. Requested query.

request_via_proxy[RW]

Request only. Requested via proxy or not.

status_code[R]

Response only. HTTP status

reason_phrase[RW]

Response only. HTTP status reason phrase.

Public Class Methods

new() click to toggle source

Creates a Message::Headers. Use init_request, init_response, or init_connect_request for acutual initialize.

     # File lib/httpclient/http.rb, line 153
153:       def initialize
154:         @http_version = 1.1
155:         @body_size = nil
156:         @chunked = false
157: 
158:         @request_method = nil
159:         @request_uri = nil
160:         @request_query = nil
161:         @request_via_proxy = nil
162: 
163:         @status_code = nil
164:         @reason_phrase = nil
165: 
166:         @body_type = nil
167:         @body_charset = nil
168:         @body_date = nil
169: 
170:         @is_request = nil
171:         @header_item = []
172:         @dumped = false
173:       end

Public Instance Methods

[](key) click to toggle source

Returns an Array of header values for the given key.

     # File lib/httpclient/http.rb, line 284
284:       def [](key)
285:         get(key).collect { |item| item[1] }
286:       end
[]=(key, value) click to toggle source

Adds a header. See set.

     # File lib/httpclient/http.rb, line 279
279:       def []=(key, value)
280:         set(key, value)
281:       end
add(key, value) click to toggle source

Adds a header. Addition order is preserved.

     # File lib/httpclient/http.rb, line 239
239:       def add(key, value)
240:         if value.is_a?(Array)
241:           value.each do |v|
242:             @header_item.push([key, v])
243:           end
244:         else
245:           @header_item.push([key, value])
246:         end
247:       end
all() click to toggle source

Returns an Array of all headers.

     # File lib/httpclient/http.rb, line 268
268:       def all
269:         @header_item
270:       end
body_size=(body_size) click to toggle source

Sets byte size of message body. body_size == nil means that the body is_a? IO

     # File lib/httpclient/http.rb, line 220
220:       def body_size=(body_size)
221:         @body_size = body_size
222:       end
contenttype() click to toggle source

Returns ‘Content-Type’ header value.

     # File lib/httpclient/http.rb, line 208
208:       def contenttype
209:         self['Content-Type'][0]
210:       end
contenttype=(contenttype) click to toggle source

Sets ‘Content-Type’ header value. Overrides if already exists.

     # File lib/httpclient/http.rb, line 213
213:       def contenttype=(contenttype)
214:         delete('Content-Type')
215:         self['Content-Type'] = contenttype
216:       end
delete(key) click to toggle source

Deletes headers of the given key.

     # File lib/httpclient/http.rb, line 273
273:       def delete(key)
274:         key = key.upcase
275:         @header_item.delete_if { |k, v| k.upcase == key }
276:       end
dump() click to toggle source

Dumps message header part and returns a dumped String.

     # File lib/httpclient/http.rb, line 225
225:       def dump
226:         set_header
227:         str = nil
228:         if @is_request
229:           str = request_line
230:         else
231:           str = response_status_line
232:         end
233:         str + @header_item.collect { |key, value|
234:           "#{ key }: #{ value }#{ CRLF }"
235:         }.join
236:       end
get(key = nil) click to toggle source

Returns an Array of headers for the given key. Each element is a pair of key and value. It returns an single element Array even if the only one header exists. If nil key given, it returns all headers.

     # File lib/httpclient/http.rb, line 258
258:       def get(key = nil)
259:         if key.nil?
260:           all
261:         else
262:           key = key.upcase
263:           @header_item.find_all { |k, v| k.upcase == key }
264:         end
265:       end
init_connect_request(uri) click to toggle source

Initialize this instance as a CONNECT request.

     # File lib/httpclient/http.rb, line 176
176:       def init_connect_request(uri)
177:         @is_request = true
178:         @request_method = 'CONNECT'
179:         @request_uri = uri
180:         @request_query = nil
181:         @http_version = 1.0
182:       end
init_request(method, uri, query = nil) click to toggle source

Initialize this instance as a general request.

     # File lib/httpclient/http.rb, line 187
187:       def init_request(method, uri, query = nil)
188:         @is_request = true
189:         @request_method = method
190:         @request_uri = uri || NIL_URI
191:         @request_query = query
192:         @request_via_proxy = false
193:       end
init_response(status_code) click to toggle source

Initialize this instance as a response.

     # File lib/httpclient/http.rb, line 196
196:       def init_response(status_code)
197:         @is_request = false
198:         self.status_code = status_code
199:       end
set(key, value) click to toggle source

Sets a header.

     # File lib/httpclient/http.rb, line 250
250:       def set(key, value)
251:         delete(key)
252:         add(key, value)
253:       end
status_code=(status_code) click to toggle source

Sets status code and reason phrase.

     # File lib/httpclient/http.rb, line 202
202:       def status_code=(status_code)
203:         @status_code = status_code
204:         @reason_phrase = STATUS_CODE_MAP[@status_code]
205:       end

Private Instance Methods

charset_label(charset) click to toggle source
     # File lib/httpclient/http.rb, line 358
358:       def charset_label(charset)
359:         CHARSET_MAP[charset] || 'us-ascii'
360:       end
create_query_uri(uri, query) click to toggle source
     # File lib/httpclient/http.rb, line 362
362:       def create_query_uri(uri, query)
363:         if @request_method == 'CONNECT'
364:           return "#{uri.host}:#{uri.port}"
365:         end
366:         path = uri.path
367:         path = '/' if path.nil? or path.empty?
368:         query_str = nil
369:         if uri.query
370:           query_str = uri.query
371:         end
372:         if query
373:           if query_str
374:             query_str += "&#{Message.create_query_part_str(query)}"
375:           else
376:             query_str = Message.create_query_part_str(query)
377:           end
378:         end
379:         if query_str
380:           path += "?#{query_str}"
381:         end
382:         path
383:       end
request_line() click to toggle source
     # File lib/httpclient/http.rb, line 290
290:       def request_line
291:         path = create_query_uri(@request_uri, @request_query)
292:         if @request_via_proxy
293:           path = "#{ @request_uri.scheme }://#{ @request_uri.host }:#{ @request_uri.port }#{ path }"
294:         end
295:         "#{ @request_method } #{ path } HTTP/#{ @http_version }#{ CRLF }"
296:       end
response_status_line() click to toggle source
     # File lib/httpclient/http.rb, line 298
298:       def response_status_line
299:         if defined?(Apache)
300:           "HTTP/#{ @http_version } #{ @status_code } #{ @reason_phrase }#{ CRLF }"
301:         else
302:           "Status: #{ @status_code } #{ @reason_phrase }#{ CRLF }"
303:         end
304:       end
set_header() click to toggle source
     # File lib/httpclient/http.rb, line 306
306:       def set_header
307:         if @is_request
308:           set_request_header
309:         else
310:           set_response_header
311:         end
312:       end
set_request_header() click to toggle source
     # File lib/httpclient/http.rb, line 314
314:       def set_request_header
315:         return if @dumped
316:         @dumped = true
317:         keep_alive = Message.keep_alive_enabled?(@http_version)
318:         if !keep_alive and @request_method != 'CONNECT'
319:           set('Connection', 'close')
320:         end
321:         if @chunked
322:           set('Transfer-Encoding', 'chunked')
323:         elsif @body_size and (keep_alive or @body_size != 0)
324:           set('Content-Length', @body_size.to_s)
325:         end
326:         if @http_version >= 1.1
327:           if @request_uri.port == @request_uri.default_port
328:             # GFE/1.3 dislikes default port number (returns 404)
329:             set('Host', "#{@request_uri.host}")
330:           else
331:             set('Host', "#{@request_uri.host}:#{@request_uri.port}")
332:           end
333:         end
334:       end
set_response_header() click to toggle source
     # File lib/httpclient/http.rb, line 336
336:       def set_response_header
337:         return if @dumped
338:         @dumped = true
339:         if defined?(Apache) && self['Date'].empty?
340:           set('Date', Time.now.httpdate)
341:         end
342:         keep_alive = Message.keep_alive_enabled?(@http_version)
343:         if @chunked
344:           set('Transfer-Encoding', 'chunked')
345:         else
346:           if keep_alive or @body_size != 0
347:             set('Content-Length', @body_size.to_s)
348:           end
349:         end
350:         if @body_date
351:           set('Last-Modified', @body_date.httpdate)
352:         end
353:         if self['Content-Type'].empty?
354:           set('Content-Type', "#{ @body_type || 'text/html' }; charset=#{ charset_label(@body_charset || $KCODE) }")
355:         end
356:       end

Disabled; run with --debug to generate this.

[Validate]

Generated with the Darkfish Rdoc Generator 1.1.6.