zoukankan      html  css  js  c++  java
  • 利用socket与ssl模块读取网页内容

    例如:

    新浪网站的IP地址可以用域名www.sina.com.cn自动转换到IP地址,但是怎么知道新浪服务器的端口号呢?

    答案是作为服务器,提供什么样的服务,端口号就必须固定下来。由于我们想要访问网页,那就要考虑网页是http还是https服务:

    端口:80
    
    服务:HTTP
    
    说明:用于网页浏览。木马Executor开放此端口
    
    端口:443
    
    服务:Https
    
    说明:网页浏览端口,能提供加密和通过安全端口传输的另一种HTTP。
    
    HTTPS(Secure Hypertext Transfer Protocol)安全超文本传输协议 它是一个安全通信通道,它基于HTTP开发,用于在客户计算机和服务器之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。
    
    HTTPS和HTTP的区别:
    
    https协议需要到ca申请证书,一般免费证书很少,需要交费。
    
    http是超文本传输协议,信息是明文传输,https 则是具有安全性的ssl加密传输协议
    
    http和https使用的是完全不同的连接方式用的端口也不一样,前者是80,后者是443。
    http的连接很简单,是无状态的 HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 要比http协议安全
    import socket
    import ssl
    def sina_html():
        sk = ssl.wrap_socket(socket.socket(socket.AF_INET, socket.SOCK_STREAM))
        sk.connect(('www.sina.com.cn',443))
        sk.send(b'GET / HTTP/1.1
    Host: www.sina.com.cn
    Connection: close
    
    ') #报头
        buffer = [] #收取网页数据的列表
        while True:
            ret = sk.recv(10240) #每次收取10240字节
            if ret:
                buffer.append(ret) #每次存放10240字节
            else:    #收完退出
                break
        sk.close()
        new_buffer = b''.join(buffer) #把列表转成字符串
        html = new_buffer.split(b'
    
    ',1) #把报头切出来,得到的是一个列表
        print(html[0].decode('utf-8')) #打印报头
        with open('web_sina.html','wb') as f:
            f.write(html[1]) #把网页存入文件
    
    if __name__ == '__main__':
        sina_html()

    代码如上,这样就得到了一个完整的网页源码

    需要注意的是两个点,一个是ssl模块,一个是端口,由于新浪使用https服务,端口为443,而新浪网在传输层进行了加密,ssl模块可实现加密通信

    ssl模块:此模块提供对网络套接字(包括客户端和服务器端)的传输层安全性(通常称为“安全套接字层”)加密和对等身份验证工具的访问。该模块使用OpenSSL库。只要在该平台上安装了OpenSSL,它就可以在所有现代Unix系统,Windows,Mac OS X以及可能的其他平台上使用。

    参考:https://docs.python.org/3/library/ssl.html#ssl.SSLContext.wrap_socket

  • 相关阅读:
    [转]asp.net页面缓存技术
    UL和LI在div中的高度的IE6下兼容性
    jquery制作的横向图片滚动带横向滚动条TackerScroll
    电脑可以上网,但是qq登陆不上去?
    Introduction to discrete event system学习笔记4.6
    Introduction to Discrete event system学习笔记4.9
    Introduction to discrete event systemsstudy 4.5
    Symbolic synthesis of obserability requirements for diagnosability B.Bittner,M.Bozzano,A.Cimatti,and X.Olive笔记4.16
    Introduction to discrete event system学习笔记4.8pm
    Introduction to discrete event system学习笔记 4.8
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11530527.html
Copyright © 2011-2022 走看看