[ANN] SimpleHTTP initial release

Discussion in 'Ruby' started by Tim Becker, Feb 8, 2007.

  1. Tim Becker

    Tim Becker Guest

    I just got through putting together a little wrapper around Net:Http
    because I keep forgetting how to handle stuff like proxies, ssl, basic
    auth and redirects with it. Thought it might be useful to others as
    well. Enjoy,
    -Tim Becker ()



    SimpleHttp - a simplified wrapper around Net::Http

    SimpleHttp aims to reduce the complexity of Net::Http while providing
    the most commonly used (by me) http functionality.

    FEATURES / USAGE

    * No fuss one line GET and POST requests:

    str = SimpleHttp.get "http://www.example.com"
    str = SimpleHttp.get "www.example.com"

    * Can use URI or String url interchangibly

    str = SimpleHttp.get URI.parse "http://www.example.com/"

    * Transparent Proxy Handling. Uses the 'http_proxy' environment
    variable if set, also provides a set_proxy method.

    http = SimpleHttp.new "http://www.example.com"
    http.set_proxy "http://proxy.example.com:8000"
    http.post "query" => "example_query"

    * POST sends ruby Hashes as 'application/x-www-form/urlencoded'
    per default, but can send any data.

    http = SimpleHttp.new "http://www.example.com/image_upload"
    http.post imageData, "img/png"

    * Automatically handles SSL

    str = SimpleHttp.get "https://secure.example.com"

    * Easy HTTP Basic Authentication

    str = SimpleHttp.get URI.parse("http://usr:p")
    #or
    http = SimpleHttp.new "http://www.example.com"
    http.basic_authentication "user", "password"
    http.post "query" => "example_query"

    * Access headers of the request or response

    http = SimpleHttp.new "www.example.com"
    http.request_header["X-Custom-Header"]="useful header"

    * Automatically follows Http Redirects.

    The get and post methods return a String containing the body of the
    request if the request was successful (HTTP 200). In case of a
    redirect, the redirect is followed and the ultimate response is
    returned. Per Default, up to three redirects are followed, this
    behaviour can be modified by setting follow_num_redirects.

    In case of any other type of response, an exception is raised.

    The default behaviour can be modified by registering handlers using
    the register_response_handler method. E.g. if you'd like to retrieve
    the Date header instead of the body for successful transactions:

    http = SimpleHttp.new ...
    http.register_response_handler(Net::HTTPSuccess) {|req,res,http|
    res['date']
    }

    Or you'd like to print the Location and then raise an exception in
    case of a redirect:

    http = SimpleHttp.new ...
    http.register_response_handler(Net::HTTPRedirect) {|req,res,http|
    puts res['location']
    raise "REDIRECT not allowed!"
    }


    http://simplehttp.rubyforge.org/
    http://rubyforge.org/projects/simplehttp/
    gem install simplehttp
     
    Tim Becker, Feb 8, 2007
    #1
    1. Advertising

  2. Tim Becker

    Tim Becker Guest

    > Can't wait ti test this soon with our enterprise's Collaboration Server
    > (it's a joke I wont name names, I only call it names;).


    Hmm, sounds like we might have been colleagues... :)
     
    Tim Becker, Feb 9, 2007
    #2
    1. Advertising

  3. Shin guey Wong, Feb 9, 2007
    #3
  4. Tim Becker

    Trans Guest

    Re: SimpleHTTP initial release

    Very nice. I think it may be almost capable enough to serve in place
    of HttpAccess2 usage in many cases (which is a rather large lib by
    comparison). Have you considered cookie support at all?

    T.
     
    Trans, Feb 9, 2007
    #4
  5. Tim Becker

    Tim Becker Guest

    Thanks everyone for your replies!

    I've made a couple of changes and will release a new version soon to
    reflect your feedback (most stuff is already in subversion) I'll
    upload a new gem, etc, shortly.



    On 2/9/07, Trans <> wrote:

    Cookies are supported by way of request and response headers. You have
    to handle the cookie data, realms and expiry yourself, though:

    ht =3D SimpleHttp.new 'www.example.com'
    ht.get
    cookie =3D ht.response_headers['set-cookie']

    It might be possible to do something like this:

    SimpleSession {
    ht =3D SimpleHttp.new 'www.example.com'
    ht.get
    page =3D SimpleHttp.get 'www.example.com/index2.html' **
    }

    ** this call would have cookies automatically set to the values
    returned in the first call. Not sure how that would work yet, but it
    may be worth pursuing.



    On 2/9/07, Pe=F1a, Botp <> wrote:

    > it's require "simple_http", right?


    correct, I've updated the README accordingly.

    > 2. how about auto completion


    sounds like an interesting idea, but I'm not sure how to set up the
    heuristics of autocompletion. When would you try alternatives? When
    DNS lookup fails for `example.com`? If you can't connect to port 80?
    On a 404? I've got a bit of auto completion already in the you can
    leave out the 'http://" bit if you like :) Anyhow, it sounds like a
    great feature, but I have no idea how I'd implement it, I'm very open
    to input, though...



    On 2/9/07, Robert Dober <> wrote:

    > I do have problems with the proxy, without a proxy simple_http works just

    fine.

    Could you tell me what sort of problems you were having? I just tried
    it here with a proxy and it worked fine.


    > May I suggest that you add setup.rb into the package (root of the tarball=

    )
    > http://i.loveruby.net/en/projects/setup/


    I added it to the package. Guess you learn something new every day, I
    had no idea setup.rb was it's own project!



    Thanks again!
    -tim
     
    Tim Becker, Feb 9, 2007
    #5
  6. Tim Becker wrote:
    > I just got through putting together a little wrapper around Net:Http
    > because I keep forgetting how to handle stuff like proxies, ssl, basic
    > auth and redirects with it. Thought it might be useful to others as
    > well. Enjoy,
    > -Tim Becker ()

    Hey, cool! Interface suggestion:
    1. SimpleHttp.get "blahblah", :proxy => 'feem'

    2. SimpleHttp.set_proxy 'feem'
    5.times { SimpleHttp.get "blahblah" }

    Devin
     
    Devin Mullins, Feb 9, 2007
    #6
  7. Tim Becker

    Tim Becker Guest

    > Hey, cool! Interface suggestion:
    > 1. SimpleHttp.get "blahblah", :proxy => 'feem


    The class `get` method already takes a hash which gets escaped and
    added to the end of the url as GET parameters, so that won't work
    out...


    > 2. SimpleHttp.set_proxy 'feem'
    > 5.times { SimpleHttp.get "blahblah" }


    adding a class method to set the proxy is a great idea, might also add
    something along those lines to add default headers such as cookies...

    Thanks for the suggestions.
    -tim
     
    Tim Becker, Feb 9, 2007
    #7
  8. Tim Becker

    Blaine Cook Guest

    Re: SimpleHTTP initial release

    On Feb 8, 7:25 am, "Tim Becker" <> wrote:
    > I just got through putting together a little wrapper around Net:Http
    > because I keep forgetting how to handle stuff like proxies, ssl, basic
    > auth and redirects with it. Thought it might be useful to others as
    > well. Enjoy,


    Wonderful library! Fills nicely the gap between open-uri and
    Net::HTTP. To follow on with others' calls for enhancement, do you
    think you'll add file upload support? It's something that's relatively
    difficult to do with the existing Ruby HTTP libraries, and would be a
    very welcome addition.

    Also, I noticed that you're using a separate webrick server to perform
    the tests - you might consider using FakeWeb (http://
    fakeweb.rubyforge.org/) to build some of the tests. It might be that
    SimpleHTTP is sufficiently low-level that mocking the responses isn't
    ideal, but it might help speed up the tests and test development.

    b.
     
    Blaine Cook, Feb 9, 2007
    #8
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Follower
    Replies:
    0
    Views:
    328
    Follower
    May 7, 2004
  2. Kirill Simonov

    [ANN] LibYAML-0.0.1: The initial release

    Kirill Simonov, Aug 1, 2006, in forum: Python
    Replies:
    0
    Views:
    352
    Kirill Simonov
    Aug 1, 2006
  3. Andrey Khavryuchenko
    Replies:
    0
    Views:
    631
    Andrey Khavryuchenko
    Jan 15, 2007
  4. Jim Menard

    [ANN] midilib initial release

    Jim Menard, Jun 27, 2004, in forum: Ruby
    Replies:
    2
    Views:
    130
    Jim Menard
    Jun 27, 2004
  5. Taku Nakajima

    [ANN] Amrita2 initial release

    Taku Nakajima, Feb 24, 2005, in forum: Ruby
    Replies:
    0
    Views:
    127
    Taku Nakajima
    Feb 24, 2005
Loading...

Share This Page