User Tools

Site Tools


python:internet

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revisionPrevious revision
Next revision
Previous revision
python:internet [2014/08/08 15:10] – [Get Cookie Information] adminpython:internet [2022/10/29 16:15] (current) – external edit 127.0.0.1
Line 346: Line 346:
 Accept: text/plain Accept: text/plain
 User-Agent: Python-urllib/2.7 User-Agent: Python-urllib/2.7
 +</code>
 +==== Get Cookie Information ====
 +<code python>
 +import urllib, urllib2
 +import cookielib
 + 
 +loginurl = 'http://dacsan.babies.vn/index.php?route=account/login'
 +params = urllib.urlencode({'email': '[email protected]', 'password':'8941362', 'redirect':'http://dacsan.babies.vn/index.php?route=account/account'})
 +headers = {"Content-type": "application/x-www-form-urlencoded",
 +           "Accept": "text/plain"}
 +req = urllib2.Request(loginurl, data = params, headers = headers)
 +
 +cj = cookielib.CookieJar() 
 +opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) 
 +response = opener.open(req)
 +
 +for cookie in cj:
 +    print cookie.name, cookie.value
 +data = response.read()
 +with open('loginresult.html', 'wb') as f:
 +    f.write(data)
 +</code>output:<code>
 +currency VND
 +language vn
 +PHPSESSID 01eg0u7uf5bm3r01h6pnrv3q33
 +</code>
 +==== Post multipart form data ====
 +=== post with encode_multipart_formdata ===
 +Post with httplib<code python>
 +import httplib, mimetypes
 +
 +def post_multipart(host, selector, fields, files):
 +    """
 +    Post fields and files to an http host as multipart/form-data.
 +    fields is a sequence of (name, value) elements for regular form fields.
 +    files is a sequence of (name, filename, value) elements for data to be uploaded as files
 +    Return the server's response page.
 +    """
 +    content_type, body = encode_multipart_formdata(fields, files)
 +    h = httplib.HTTP(host)
 +    h.putrequest('POST', selector)
 +    h.putheader('content-type', content_type)
 +    h.putheader('content-length', str(len(body)))
 +    h.endheaders()
 +    h.send(body)
 +    errcode, errmsg, headers = h.getreply()
 +    return h.file.read()
 +
 +def encode_multipart_formdata(fields, files):
 +    """
 +    fields is a sequence of (name, value) elements for regular form fields.
 +    files is a sequence of (name, filename, value) elements for data to be uploaded as files
 +    Return (content_type, body) ready for httplib.HTTP instance
 +    """
 +    BOUNDARY = '----------ThIs_Is_tHe_bouNdaRY_$'
 +    CRLF = '\r\n'
 +    L = []
 +    for (key, value) in fields:
 +        L.append('--' + BOUNDARY)
 +        L.append('Content-Disposition: form-data; name="%s"' % key)
 +        L.append('')
 +        L.append(value)
 +    for (key, filename, value) in files:
 +        L.append('--' + BOUNDARY)
 +        L.append('Content-Disposition: form-data; name="%s"; filename="%s"' % (key, filename))
 +        L.append('Content-Type: %s' % get_content_type(filename))
 +        L.append('')
 +        L.append(value)
 +    L.append('--' + BOUNDARY + '--')
 +    L.append('')
 +    body = CRLF.join(L)
 +    content_type = 'multipart/form-data; boundary=%s' % BOUNDARY
 +    return content_type, body
 +
 +def get_content_type(filename):
 +    return mimetypes.guess_type(filename)[0] or 'application/octet-stream'
 +</code>
 +=== fix encode_multipart_formdata for posting binary file ===
 +<code python>
 +def encode_multipart_formdata(fields, files):
 +    """
 +    fields is a sequence of (name, value) elements for regular form fields.
 +    files is a sequence of (name, filename, value) elements for data to be uploaded as files
 +    Return (content_type, body) ready for httplib.HTTP instance
 +    """    
 +    
 +    buf = StringIO()
 +    boundary = mimetools.choose_boundary()            
 +    for (key, value) in fields:
 +        buf.write('--%s\r\n' % boundary)
 +        buf.write('Content-Disposition: form-data; name="%s"' % key)
 +        buf.write('\r\n\r\n' + value + '\r\n')
 +    for (key, filename, value) in files:
 +        contenttype = mimetypes.guess_type(filename)[0] or 'application/octet-stream'
 +        buf.write('--%s\r\n' % boundary)
 +        buf.write('Content-Disposition: form-data; name="%s"; filename="%s"\r\n' % (key, filename))
 +        buf.write('Content-Type: %s\r\n' % contenttype)
 +        buf.write('\r\n' + value + '\r\n')
 +    buf.write('--' + boundary + '--\r\n\r\n')
 +    buf = buf.getvalue()
 +    content_type = 'multipart/form-data; boundary=%s' % boundary
 +    return content_type, buf
 +</code>
 +=== Post using MultipartPostHandler ===
 +  * Install:<code bash>
 +pip install MultipartPostHandler
 +</code>
 +  * example:<code python>
 +import MultipartPostHandler, urllib2, cookielib
 +
 +cookies = cookielib.CookieJar()
 +opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cookies),
 +                                MultipartPostHandler.MultipartPostHandler)
 +params = { "username" : "bob", "password" : "riviera",
 +           "file" : open("filename", "rb") }
 +opener.open("http://wwww.bobsite.com/upload/", params)
 </code> </code>
 ===== twisted internet ===== ===== twisted internet =====
python/internet.1407510608.txt.gz · Last modified: 2022/10/29 16:15 (external edit)