[#46105] [ruby-trunk - Feature #6687][Open] Enumerable#with — "merborne (kyo endo)" <redmine@...>

14 messages 2012/07/02

[#46133] [ruby-trunk - Feature #6688][Open] Object#replace — "prijutme4ty (Ilya Vorontsov)" <prijutme4ty@...>

24 messages 2012/07/03

[#46160] [ruby-trunk - Feature #6693][Open] Don't warn for unused variables starting with _ — "marcandre (Marc-Andre Lafortune)" <ruby-core@...>

15 messages 2012/07/04

[#46200] [ruby-trunk - Bug #6702][Open] Date should be either required or not — "rosenfeld (Rodrigo Rosenfeld Rosas)" <rr.rosas@...>

14 messages 2012/07/05

[#46296] [ruby-trunk - Feature #6717][Open] Method like #instance_eval that returns self (like #tap) — "alexeymuranov (Alexey Muranov)" <redmine@...>

10 messages 2012/07/10

[#46320] [ruby-trunk - Feature #6721][Open] Object#yield_self — "alexeymuranov (Alexey Muranov)" <redmine@...>

25 messages 2012/07/11

[#46339] [ruby-trunk - Bug #6724][Open] waaaaaaant! ( — "zenspider (Ryan Davis)" <redmine@...>

11 messages 2012/07/11

[#46377] [ruby-trunk - Feature #6727][Open] Add Array#rest (with implementation) — "duckinator (Nick Markwell)" <nick@...>

25 messages 2012/07/13

[#46492] [ruby-trunk - Feature #6737][Open] Add Hash#read and alias as #[]. — "trans (Thomas Sawyer)" <transfire@...>

12 messages 2012/07/15

[#46500] [ruby-trunk - Feature #6739][Open] One-line rescue statement should support specifying an exception class — Quintus (Marvin Gülker) <sutniuq@...>

22 messages 2012/07/15

[#46562] [ruby-trunk - Feature #6758][Open] Object#sequence — "merborne (kyo endo)" <redmine@...>

19 messages 2012/07/20

[#46574] [ruby-trunk - Feature #6762][Open] Control interrupt timing — "ko1 (Koichi Sasada)" <redmine@...>

39 messages 2012/07/20

[#46641] [ruby-trunk - Bug #6780][Open] cannot compile zlib module, when cross-compiling. — "jinleileiking (lei king)" <jinleileiking@...>

14 messages 2012/07/23

[#46659] [ruby-trunk - Bug #6783][Open] Infinite loop in inspect, not overriding inspect, to_s, and no known circular references. Stepping into inspect in debugger locks it up with 100% CPU. — "garysweaver (Gary Weaver)" <garysweaver@...>

8 messages 2012/07/23

[#46792] [ruby-trunk - Bug #6799][Open] Digest::*.hexdigest returns an ASCII-8BIT String — "Eregon (Benoit Daloze)" <redmine@...>

11 messages 2012/07/26

[#46799] [ruby-trunk - Feature #6801][Open] String#~ for a here document — "merborne (kyo endo)" <redmine@...>

12 messages 2012/07/27

[#46829] [ruby-trunk - Feature #6806][Open] Support functional programming: forbid instance/class variables for ModuleName::method_name, allow for ModuleName.method_name — "alexeymuranov (Alexey Muranov)" <redmine@...>

7 messages 2012/07/28

[#46832] [ruby-trunk - Bug #6807][Open] Can't compile ruby without ruby — "devcurmudgeon (Paul Sherwood)" <storitel@...>

13 messages 2012/07/28

[#46834] [ruby-trunk - Feature #6808][Open] Implicit index for enumerations — "trans (Thomas Sawyer)" <transfire@...>

15 messages 2012/07/28

[#46838] [ruby-trunk - Bug #6810][Open] `module A::B; end` is not equivalent to `module A; module B; end; end` with respect to constant lookup (scope) — "alexeymuranov (Alexey Muranov)" <redmine@...>

17 messages 2012/07/28

[#46896] (Half-baked DRAFT) new `require' framework — SASADA Koichi <ko1@...>

Hi,

22 messages 2012/07/31

[ruby-core:46581] [ruby-trunk - Feature #6482] Add URI requested to Net::HTTP request and response objects

From: "drbrain (Eric Hodel)" <drbrain@...7.net>
Date: 2012-07-20 23:16:22 UTC
List: ruby-core #46581
Issue #6482 has been updated by drbrain (Eric Hodel).

File net.http.request_response_uri.3.patch added

=begin
naruse (Yui NARUSE) wrote:
> drbrain (Eric Hodel) wrote:
> > This does not seem to match the current behavior of req['Host'] as it must be manually cleared in order to reuse the request with a different host.
> 
> Try following:
>   […]
> 
> The host part of a URI for initialize seems to be the same thing of req['Host'].

I think I don't understand.  My patch uses the host part of URI for initialize to set req['Host']. Also, if you set req['Host'] the URI is updated correctly. Which server you connect to doesn't seem to matter.

I don't see the request Host header matching the connection host address with current net/http:

  $ svnversion
  36482
  $ cat test.rb 
  require 'net/http'
  req = Net::HTTP::Get.new '/'
  puts "req Host: #{req['Host']}"
  res = Net::HTTP.start 'redmine.ruby-lang.org' do |http|
    puts "con Host: #{http.address}"
    http.request req
  end
  puts "req Host: #{req['Host']}"
  res = Net::HTTP.start 'bugs.ruby-lang.org' do |http|
    puts "con Host: #{http.address}"
    http.request req
  end
  puts "req Host: #{req['Host']}"
  
  $ make runruby
  ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems ./test.rb
  req Host: 
  con Host: redmine.ruby-lang.org
  req Host: redmine.ruby-lang.org
  con Host: bugs.ruby-lang.org
  req Host: redmine.ruby-lang.org

My latest patch has identical behavior:

  $ patch -p0 < net.http.request_response_uri.3.patch 
  […]
  $ make runruby
  ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems ./test.rb
  req Host: 
  con Host: redmine.ruby-lang.org
  req Host: redmine.ruby-lang.org
  con Host: bugs.ruby-lang.org
  req Host: redmine.ruby-lang.org

Identical test using URI instead of string path:

  $ cat test.rb 
  require 'net/http'
  u = URI("http://redmine.ruby-lang.org/")
  req = Net::HTTP::Get.new u
  puts "req Host: #{req['Host']}"
  puts "req URI:  #{req.uri}"
  res = Net::HTTP.start 'redmine.ruby-lang.org' do |http|
    puts "con Host: #{http.address}"
    http.request req
  end
  puts "req Host: #{req['Host']}"
  puts "req URI:  #{req.uri}"
  res = Net::HTTP.start 'bugs.ruby-lang.org' do |http|
    puts "con Host: #{http.address}"
    http.request req
  end
  puts "req Host: #{req['Host']}"
  puts "req URI:  #{req.uri}"
  
  $ make runruby
  ./miniruby -I./lib -I. -I.ext/common  ./tool/runruby.rb --extout=.ext  -- --disable-gems ./test.rb
  req Host: redmine.ruby-lang.org
  req URI:  http://redmine.ruby-lang.org/
  con Host: redmine.ruby-lang.org
  req Host: redmine.ruby-lang.org
  req URI:  http://redmine.ruby-lang.org/
  con Host: bugs.ruby-lang.org
  req Host: redmine.ruby-lang.org
  req URI:  http://redmine.ruby-lang.org/

=end

----------------------------------------
Feature #6482: Add URI requested to Net::HTTP request and response objects
https://bugs.ruby-lang.org/issues/6482#change-28241

Author: drbrain (Eric Hodel)
Status: Assigned
Priority: Normal
Assignee: naruse (Yui NARUSE)
Category: lib
Target version: 2.0.0


=begin
This patch adds the full URI requested to Net::HTTPRequest and Net::HTTPResponse.

The goal of this is to make it easier to handle Location, Refresh, meta-headers, and URIs in retrieved documents.  (While the HTTP RFC specifies the Location must be an absolute URI, not every server follows the RFC.)  In order to process redirect responses from bad servers or relative URIs in requested documents the user must create an object that contains both the requested URI and the response object to create absolute URIs.  This patch reduces the amount of boilerplate they are required to write.

Only the (({request_uri})) is used from the URI given when creating a request.  The URI is stored internally and updated with the host, port and scheme used to make the request at request time.  The URI is then copied to the response object for use by the user.

To preserve backwards compatibility the new behavior is optional.  This allows requests with invalid URI paths like (({Net::HTTP::Get.new '/f%'})) to continue to work.  Users of string paths will not be able to retrieve the requested URI.

This patch is for support of #5064
=end



-- 
http://bugs.ruby-lang.org/

In This Thread