美文网首页
Flask学习笔记之HTTP(一)

Flask学习笔记之HTTP(一)

作者: 容澄 | 来源:发表于2016-06-19 13:18 被阅读0次

    先整理一下HTTP基础知识:

    HTTP 方法:GET 对比 POST

    HTTP 的工作方式是客户机与服务器之间的请求-应答协议。web 浏览器可能是客户端,而计算机上的网络应用程序也可能作为服务器端。

    举例:客户端(浏览器)向服务器提交 HTTP 请求;服务器向客户端返回响应。响应包含关于请求的状态信息以及可能被请求的内容。

    在客户机和服务器之间进行请求-响应时,两种最常被用到的方法是:GET 和 POST:
    GET - 从指定的资源请求数据。
    POST - 向指定的资源提交要被处理的数据。

    一般来说,GET被认为是安全的,该操作用于获取信息而非修改信息,类似数据库查询,不会修改数据,不会影响资源的状态;而POST可以改变资源状态。


    浅谈HTTP中Get与Post的区别

    GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。

    • 如果数据是英文字母/数字,原样发送,
    • 如果是空格,转换为+,
    • 如果是中文/其他字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。

    注:Python 3中encode参数的函数: parse.urlencode()

    Python中以GET方式抓取数据:

    from urllib import request, parse 
    
    # Base URL being accessed
    url = 'http://httpbin.org/get'
    
    # Dictionary of query parameters (if any)
    parms = {
           'name' : 'wang',
           'age' : '/'
    }
        
    # Encode the query string
    querystring = parse.urlencode(parms)
    
    # Make a GET request and read the response
    u = request.urlopen(url+'?' + querystring)
    resp = u.read()
    


    POST把提交的数据则放置在是HTTP包的包体中。

    Python中以POST方式抓取数据:

    from urllib import request, parse 
    ...
    u = request.urlopen(url, querystring.encode('ascii'))
    



    除了urllib,也可以用request达到相同目的,而且更强大,比如加上请求头:

    import requests
    ...
    # Extra headers
    headers = { 'User-agent' : 'none/ofyourbusiness', 'Spam' : 'Eggs'} 
    resp = requests.post(url, data=parms, headers=headers)
     
    # Decoded text returned by the request
    text = resp.text
    



    Extract请求头信息:

    import requests
    resp = requests.head('http://www.python.org/index.html')
    status = resp.status_code 
    last_modified = resp.headers['last-modified'] 
    content_type = resp.headers['content-type'] 
    content_length = resp.headers['content-length']
    



    实现登录:

    import requests
    resp = requests.get('http://pypi.python.org/pypi?:action=login',
    auth=('user','password'))
    



    Pass cookies

    import requests
    
    # First request
    resp1 = requests.get(url) 
    
    # Second requests with cookies received on first requests
    resp2 = requests.get(url, cookies=resp1.cookies)
    



    用POST上传资源

    import requests
    url = 'http://httpbin.org/post'
    files = { 'file': ('data.csv', open('data.csv', 'rb')) }
    r = requests.post(url, files=files)
    

    参考资料:《Python Cookbook》

    相关文章

      网友评论

          本文标题:Flask学习笔记之HTTP(一)

          本文链接:https://www.haomeiwen.com/subject/vmebdttx.html