I neglected to mention that if you use the proxy version of Net::HTTP,
you can get it to work without a proxy by putting in "" for the proxy
and port. Here's the proxy version:
net = Net::HTTP::Proxy("proxy", "80").start(host)
and the non-proxy version:
net = Net::HTTP::Proxy("", "").start(host)
HTH,
Craig
On 4/25/05, Craig Moran <craig.m.moran.ruby / gmail.com> wrote:
> I am behind a proxy server at work, yet got this to work. I commented
> out your Net::HTTP.new line and added what I believe to be the Proxy
> equivalent. Then I set Mozilla Firefox's proxy to be localhost:8080.
> NOTE: I do not have the ability to use another machine to test as I
> am very restricted with net access here. I launched slashdot.org and
> monitored the proxy.rb window while all of the HTML flew by. It came
> up and rendered properly in the browser.
>
> I am on Windows 2000
> C:\>ruby -v
> ruby 1.8.2 (2004-12-25) [i386-mswin32]
>
> Here's the code. Hope it helps:
>
> require 'socket'
> require 'net/http'
> local_host = 'localhost'
> local_port = 8080
>
> host = 'slashdot.org'
> server = TCPServer.new(local_host, local_port)
> while true
> Thread.start(server.accept) do |s|
> data = ''
> while s.gets && !$_.nil?
> data += $_
> break if $_ == "\r\n" || $_ == "\n"
> end
> p "====Received: #{data}"
> # net = Net::HTTP.new(host,80)
> net = Net::HTTP::Proxy("proxy", "80").start(host)
> response = net.get('/')
> s <<
> "HTTP/#{response.http_version}#{response.code}/#{response.message}
> \r\n"
> p "====Got back"
> response.each_header do |key,value|
> tmp = key + ": " + value + "\r\n"
> p tmp
> s << tmp
> end
> p response.body
> s << "\r\n" << response.body
> s.close # We're done with this request, bring on the next.
> end
> end
>
> On 4/21/05, Tanner Burson <tanner.burson / gmail.com> wrote:
> > I've been working on a proxy server implementation for a project idea
> > I have. But I've found that it only seems to work on certain pages,
> > and not on others. I've distilled the problem down to a simple
> > implementation, but it still occurs. The code below will return a
> > (mostly) correct website if pointed at 'www.msn.com' but if pointed at
> > say 'slashdot.org' the browser refuses to display it, in both cases
> > the page is loaded correctly. If anyone has any ideas I'd really
> > appreciate it.
> >
> > ===proxy.rb
> >
> > require 'socket'
> > require 'net/http'
> > local_host = '192.168.0.6'
> > local_port = 8080
> >
> > host = 'slashdot.org'
> > server = TCPServer.new(local_host,local_port)
> > while true
> > Thread.start(server.accept) do |s|
> > data = ''
> > while s.gets && !$_.nil?
> > data += $_
> > break if $_ == "\r\n" || $_ == "\n"
> > end
> > p "====Received: #{data}"
> > net = Net::HTTP.new(host,80)
> > response = net.get('/')
> > s << "HTTP/#{response.http_version}
> > #{response.code}/#{response.message} \r\n"
> > p "====Got back"
> > response.each_header do |key,value|
> > tmp = key + ": " + value + "\r\n"
> > p tmp
> > s << tmp
> > end
> > p response.body
> > s << "\r\n" << response.body
> > s.close # We're done with this request, bring on the next.
> > end
> > end
> >
> > ====end
> > --
> > ===Tanner Burson===
> > tanner.burson / gmail.com
> > http://tannerburson.com <---Might even work one day...
> >
> >
>