
import socket

try:
    import httplib
except ImportError:
    import http.client as httplib

from isso.wsgi import urlsplit


class curl(object):
    """Easy to use wrapper around :module:`httplib`.  Use as context-manager
    so we can close the response properly.

    .. code-block:: python

        with http.curl('GET', 'http://localhost:8080', '/') as resp:
            if resp:  # may be None if request failed
                return resp.status
    """

    def __init__(self, method, host, path, timeout=3):
        self.method = method
        self.host = host
        self.path = path
        self.timeout = timeout

    def __enter__(self):

        host, port, ssl = urlsplit(self.host)
        http = httplib.HTTPSConnection if ssl else httplib.HTTPConnection

        self.con = http(host, port, timeout=self.timeout)

        try:
            self.con.request(self.method, self.path)
        except (httplib.HTTPException, socket.error):
            return None

        return self.con.getresponse()

    def __exit__(self, exc_type, exc_value, traceback):
        self.con.close()


import socket

try:
    import httplib
except ImportError:
    import http.client as httplib

from isso.wsgi import urlsplit


class curl(object):
    """Easy to use wrapper around :module:`httplib`.  Use as context-manager
    so we can close the response properly.

    .. code-block:: python

        with http.curl('GET', 'http://localhost:8080', '/') as resp:
            if resp:  # may be None if request failed
                return resp.status
    """

    def __init__(self, method, host, path, timeout=3):
        self.method = method
        self.host = host
        self.path = path
        self.timeout = timeout

    def __enter__(self):

        host, port, ssl = urlsplit(self.host)
        http = httplib.HTTPSConnection if ssl else httplib.HTTPConnection

        self.con = http(host, port, timeout=self.timeout)

        try:
            self.con.request(self.method, self.path)
        except (httplib.HTTPException, socket.error):
            return None

        try:
            return self.con.getresponse()
        except (socket.timeout, socket.error):
            return None

    def __exit__(self, exc_type, exc_value, traceback):
        self.con.close()

Fix catch socket timeout and error exceptions
Fix catch socket timeout and error exceptions
  
  import socket
  
  try:
      import httplib
  except ImportError:
      import http.client as httplib
  
  from isso.wsgi import urlsplit
  
  
  class curl(object):
      """Easy to use wrapper around :module:`httplib`.  Use as context-manager
      so we can close the response properly.
  
      .. code-block:: python
  
          with http.curl('GET', 'http://localhost:8080', '/') as resp:
              if resp:  # may be None if request failed
                  return resp.status
      """
  
      def __init__(self, method, host, path, timeout=3):
          self.method = method
          self.host = host
          self.path = path
          self.timeout = timeout
  
      def __enter__(self):
  
          host, port, ssl = urlsplit(self.host)
          http = httplib.HTTPSConnection if ssl else httplib.HTTPConnection
  
          self.con = http(host, port, timeout=self.timeout)
  
          try:
              self.con.request(self.method, self.path)
          except (httplib.HTTPException, socket.error):
              return None
  
+         try:
-         return self.con.getresponse()
+             return self.con.getresponse()
+         except (socket.timeout, socket.error):
+             return None
  
      def __exit__(self, exc_type, exc_value, traceback):
          self.con.close()
  
Fix catch socket timeout and error exceptions
## Code Before:

import socket

try:
    import httplib
except ImportError:
    import http.client as httplib

from isso.wsgi import urlsplit


class curl(object):
    """Easy to use wrapper around :module:`httplib`.  Use as context-manager
    so we can close the response properly.

    .. code-block:: python

        with http.curl('GET', 'http://localhost:8080', '/') as resp:
            if resp:  # may be None if request failed
                return resp.status
    """

    def __init__(self, method, host, path, timeout=3):
        self.method = method
        self.host = host
        self.path = path
        self.timeout = timeout

    def __enter__(self):

        host, port, ssl = urlsplit(self.host)
        http = httplib.HTTPSConnection if ssl else httplib.HTTPConnection

        self.con = http(host, port, timeout=self.timeout)

        try:
            self.con.request(self.method, self.path)
        except (httplib.HTTPException, socket.error):
            return None

        return self.con.getresponse()

    def __exit__(self, exc_type, exc_value, traceback):
        self.con.close()

## Instruction:
Fix catch socket timeout and error exceptions
## Code After:

import socket

try:
    import httplib
except ImportError:
    import http.client as httplib

from isso.wsgi import urlsplit


class curl(object):
    """Easy to use wrapper around :module:`httplib`.  Use as context-manager
    so we can close the response properly.

    .. code-block:: python

        with http.curl('GET', 'http://localhost:8080', '/') as resp:
            if resp:  # may be None if request failed
                return resp.status
    """

    def __init__(self, method, host, path, timeout=3):
        self.method = method
        self.host = host
        self.path = path
        self.timeout = timeout

    def __enter__(self):

        host, port, ssl = urlsplit(self.host)
        http = httplib.HTTPSConnection if ssl else httplib.HTTPConnection

        self.con = http(host, port, timeout=self.timeout)

        try:
            self.con.request(self.method, self.path)
        except (httplib.HTTPException, socket.error):
            return None

        try:
            return self.con.getresponse()
        except (socket.timeout, socket.error):
            return None

    def __exit__(self, exc_type, exc_value, traceback):
        self.con.close()
