示例#1
0
 def __init__(self, content=b'', mimetype=None, charset=b"utf-8"):
     self.headers = httputils.Headers()
     self.cookies = httputils.CookieJar()
     self._charset = charset
     if mimetype:
         self.headers.add_header(
             httputils.ContentType(mimetype, charset=self._charset))
     if hasattr(content, '__iter__'):
         self._container = content
         self._is_string = False
     else:
         self._container = [content]
         self._is_string = True
示例#2
0
 def __init__(self, content='', mimetype=None):
     self.headers = httputils.Headers()
     self.cookies = httputils.CookieJar()
     self._charset = sys.getdefaultencoding()  # XXX
     if mimetype:
         self.headers.add_header(
             httputils.ContentType(mimetype, charset=self._charset))
     if hasattr(content, '__iter__'):
         self._container = content
         self._is_string = False
     else:
         self._container = [content]
         self._is_string = True
示例#3
0
 def get_json_poster(self):
     """Initialze a Curl object for a single POST request using an object
     that returns JSON from its "to_json" method.
     """
     data = self._data.to_json()
     c = pycurl.Curl()
     resp = HTTPResponse(self._encoding)
     c.setopt(c.URL, str(self._url))
     c.setopt(pycurl.POST, 1)
     c.setopt(pycurl.POSTFIELDS, data)
     c.setopt(c.WRITEFUNCTION, resp._body_callback)
     c.setopt(c.HEADERFUNCTION, resp._header_callback)
     headers = self._headers[:]
     headers.append(httputils.ContentType("application/json-rpc"))
     headers.append(httputils.ContentLength(str(len(data))))
     c.setopt(c.HTTPHEADER, list(map(str, headers)))
     self._set_common(c)
     return c, resp
示例#4
0
    def get_URLencoded_poster(self):
        """Initialze a Curl object for a single POST request.

        Returns a tuple of initialized Curl and HTTPResponse objects.
        """
        data = urlencode(self._data, True)
        c = pycurl.Curl()
        resp = HTTPResponse(self._encoding)
        c.setopt(c.URL, str(self._url))
        c.setopt(pycurl.POST, 1)
        c.setopt(pycurl.POSTFIELDS, data)
        c.setopt(c.WRITEFUNCTION, resp._body_callback)
        c.setopt(c.HEADERFUNCTION, resp._header_callback)
        headers = self._headers[:]
        headers.append(httputils.ContentType("application/x-www-form-urlencoded"))
        headers.append(httputils.ContentLength(str(len(data))))
        c.setopt(c.HTTPHEADER, list(map(str, headers)))
        self._set_common(c)
        return c, resp
示例#5
0
    def get_raw_poster(self):
        """Initialze a Curl object for a single POST request.

        This sends whatever data you give it, without specifying the content
        type.

        Returns a tuple of initialized Curl and HTTPResponse objects.
        """
        ld = len(self._data)
        c = pycurl.Curl()
        resp = HTTPResponse(self._encoding)
        c.setopt(c.URL, str(self._url))
        c.setopt(pycurl.POST, 1)
        c.setopt(c.READFUNCTION, DataWrapper(self._data).read)
        c.setopt(c.POSTFIELDSIZE, ld)
        c.setopt(c.WRITEFUNCTION, resp._body_callback)
        c.setopt(c.HEADERFUNCTION, resp._header_callback)
        headers = self._headers[:]
        headers.append(httputils.ContentType("")) # removes libcurl internal header
        headers.append(httputils.ContentLength(str(ld)))
        c.setopt(c.HTTPHEADER, list(map(str, headers)))
        self._set_common(c)
        return c, resp
示例#6
0
 def _parse_post_content(self):
     if self.method == b'POST':
         content_type = httputils.ContentType(
             self.environ.get(b'CONTENT_TYPE', ''))
         ctvalue = content_type.value.lower()
         if ctvalue == b'multipart/form-data':
             self._post, self._files = parse_formdata(
                 content_type, self._get_raw_post_data())
         elif ctvalue == b"application/x-www-form-urlencoded":
             self._post = urlparse.queryparse(self._get_raw_post_data())
             self._files = None
         else:  # some buggy clients don't set proper content-type, so
             # just preserve the raw data as a file.
             self.log_error("Bad content-type: {!s}".format(content_type))
             data = self._get_raw_post_data()
             self._post = urlparse.queryparse(data)
             self._files = {}
             self._files["body"] = {
                 b'content-type': content_type,
                 b'content': data,
             }
     else:
         self._post = urlparse.URLQuery()
         self._files = None
示例#7
0
    return mod


if __name__ == "__main__":

    DATA = b"""------WebKitFormBoundaryLHph2NIrIQTpfNKw\r
Content-Disposition: form-data; name="name"\r
\r
myenvattr\r
------WebKitFormBoundaryLHph2NIrIQTpfNKw\r
Content-Disposition: form-data; name="description"\r
\r
Some attr test.\r
------WebKitFormBoundaryLHph2NIrIQTpfNKw\r
Content-Disposition: form-data; name="value_type"\r
\r
1\r
------WebKitFormBoundaryLHph2NIrIQTpfNKw\r
Content-Disposition: form-data; name="submit"\r
\r
submit\r
------WebKitFormBoundaryLHph2NIrIQTpfNKw--\r
"""

    content_type = b"Multipart/form-data; boundary=----WebKitFormBoundaryLHph2NIrIQTpfNKw"
    content_type = httputils.ContentType(content_type)
    print(content_type.value)
    post, files = parse_formdata(content_type, DATA)

    print(post.items())