Register now and start sharing your code snippets.

A simple Python HTTP client

Python posted 9 days ago by christian

A simple HTTP client I had lying around that I wrote a long time ago. It supports cookies, redirects and stuff:

   1  #!/usr/bin/env python
   2  #
   3  #     Http
   4  #
   5  #     A simple HTTP client that supports persistent cookies
   6  #
   7  
   8  import cookielib
   9  import httplib
  10  #httplib.HTTPConnection.debuglevel = 1
  11  import urllib2
  12  
  13  class Http:
  14    def __init__(self, redirect_callback = None):
  15      self.redirect_callback = redirect_callback
  16      self.cookie_jar = cookielib.CookieJar()
  17      self.opener = urllib2.build_opener(urllib2.HTTPCookieProcessor (self.cookie_jar))
  18  
  19      urllib2.install_opener(self.opener)
  20  
  21    def get(self, url, headers = None):
  22      request = urllib2.Request(url, headers = headers)
  23      return self.execute_request(request)
  24  
  25    def post(self, url, headers = None, parameters = None):
  26      data = None
  27      if parameters != None:
  28        data = urllib.urlencode(parameters)
  29  
  30      request = urllib2.Request(url, data, headers)
  31      return self.execute_request(request)
  32  
  33    def execute_request(self, request):
  34      response = self.opener.open(request)
  35      # Check for redirect, maybe better way to do this
  36      if response.geturl() != request.get_full_url():
  37        if self.redirect_callback == None:
  38          raise "Redirected to '" + response.geturl() + "' but no redirect callback defined"
  39        else:
  40          self.redirect_callback(response)
  41  
  42      return response
  43  

Tagged python, http, client

Example of how to fetch a URL with Net:HTTP and Ruby

Ruby posted 5 months ago by christian

   1  require 'net/http'
   2  require 'net/https'
   3  
   4  url = URI.parse('http://www.google.com/')
   5  
   6  http = Net::HTTP.new(url.host, url.port)
   7  
   8  http.open_timeout = http.read_timeout = 10  # Set open and read timeout to 10 seconds
   9  http.use_ssl = (url.scheme == "https")
  10         
  11  headers = {
  12    'User-Agent'          => 'Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12',
  13    'If-Modified-Since'   => '',
  14    'If-None-Match'       => ''
  15  }
  16  
  17  response, body = http.get(url.path, headers)
  18  
  19  puts response.code
  20  puts response.message
  21  
  22  response.each {|key, val| puts key + ' = ' + val}

Tagged net, http, ruby, example, headers

How to print all HTTP headers with PHP

PHP posted 8 months ago by christian

   1  <ul>
   2   <?php
   3     foreach($_SERVER as $h=>$v)
   4       if(ereg('HTTP_(.+)',$h,$hp))
   5         echo "<li>$h = $v</li>\n";
   6     header('Content-type: text/html');
   7    ?>
   8  </ul>

Tagged php, http, headers, request

Simple Mongrel HTTP server and custom Mongrel handler example

Ruby posted about 1 year ago by christian

   1  # http://mongrel.rubyforge.org/rdoc/index.html
   2  # gem install -y mongrel
   3  require 'rubygems'
   4  require 'mongrel'
   5  
   6  # Usage: ruby mongrel_http_server.rb <host> <port> <docroot>
   7  host    = ARGV[0] || "127.0.0.1"
   8  port    = ARGV[1] || 80
   9  docroot = ARGV[2] || "html/"
  10  
  11  # Simple Mongrel handler that prints the current date and time
  12  class HandlerExample < Mongrel::HttpHandler
  13     def process(request, response)
  14        response.start(200) do |head, out|
  15           head["Content-Type"] = "text/html"
  16           out.write Time.now
  17        end
  18     end
  19  end
  20  
  21  # Configure Mongrel and handlers
  22  config = Mongrel::Configurator.new :host => host, :port => port do
  23    listener do
  24      uri "/",              :handler => Mongrel::DirHandler.new(docroot)
  25      uri "/handler_example", :handler => HandlerExample.new, :in_front => true
  26    end
  27  
  28    # CTRL+C to stop server
  29    trap("INT") { stop }
  30    run
  31  end
  32  
  33  # Start Mongrel
  34  puts "Mongrel listening on '#{host}:#{port}', serving documents from '#{docroot}'."
  35  config.join
  36  

Tagged mongrel, http, server, handler