コード例 #1
0
ファイル: Client.py プロジェクト: yay-couch/couch-py
   def request(self, uri, uriParams = {}, body = None, headers = {}):
      """
      Make a HTTP request using Request and return Response.

      @param  (str)   uri
      @param  (dict)  uriParams
      @param  (mixed) body
      @param  (dict)  headers
      @return (couch.http.Response)
      @throws (Exception)
      """
      # match for a valid request i.e: HEAD /foo
      r = re.match("^([A-Z]+)\s+(/.*)", uri)
      if not r:
         raise Exception("Usage: <REQUEST METHOD> <REQUEST URI>!")

      m = r.groups()
      if len(m) < 2:
         raise Exception("Usage: <REQUEST METHOD> <REQUEST URI>!")

      self.Request = Request(self)
      self.Response = Response()

      # merge host, port and uri
      uri = "%s:%s/%s" % (self.host, self.port, m[1].strip(" /"))

      # set request method, uri, body
      self.Request \
         .setMethod(m[0]) \
         .setUri(uri, uriParams) \
         .setBody(body)

      # set request headers (if any)
      for key, value in headers.items():
         self.Request.setHeader(key, value)

      result = self.Request.send()
      if result != "":
         headers, body = result.split("\r\n\r\n", 1)
         headers = util.parseHeaders(headers)
         if headers:
            for key, value in headers.items():
               # status line
               if key == "0":
                  self.Response.setStatus(value)
               self.Response.setHeader(key, value)
         self.Response.setBody(body)

      # is error?
      if self.Response.getStatusCode() >= 400:
         self.Response.setError()

      return self.Response
コード例 #2
0
    def request(self, uri, uriParams={}, body=None, headers={}):
        """
      Make a HTTP request using Request and return Response.

      @param  (str)   uri
      @param  (dict)  uriParams
      @param  (mixed) body
      @param  (dict)  headers
      @return (couch.http.Response)
      @throws (Exception)
      """
        # match for a valid request i.e: HEAD /foo
        r = re.match("^([A-Z]+)\s+(/.*)", uri)
        if not r:
            raise Exception("Usage: <REQUEST METHOD> <REQUEST URI>!")

        m = r.groups()
        if len(m) < 2:
            raise Exception("Usage: <REQUEST METHOD> <REQUEST URI>!")

        self.Request = Request(self)
        self.Response = Response()

        # merge host, port and uri
        uri = "%s:%s/%s" % (self.host, self.port, m[1].strip(" /"))

        # set request method, uri, body
        self.Request \
           .setMethod(m[0]) \
           .setUri(uri, uriParams) \
           .setBody(body)

        # set request headers (if any)
        for key, value in headers.items():
            self.Request.setHeader(key, value)

        result = self.Request.send()
        if result != "":
            headers, body = result.split("\r\n\r\n", 1)
            headers = util.parseHeaders(headers)
            if headers:
                for key, value in headers.items():
                    # status line
                    if key == "0":
                        self.Response.setStatus(value)
                    self.Response.setHeader(key, value)
            self.Response.setBody(body)

        # is error?
        if self.Response.getStatusCode() >= 400:
            self.Response.setError()

        return self.Response