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

  • 相关阅读:
    项目管理和项目群管理的区别
    项目群管理
    PRINCE2如何完善PMBOK和您的PMP资格证书?
    为什么需要prince2项目管理方法论?
    PMP和PRINCE2到底有什么区别?哪个含金量更高?
    同步和异步
    Promise理解
    async和await实现异步的同步等待
    Mysql数据库操作基础步骤
    PHP和javascript区别
  • 原文地址:https://www.cnblogs.com/aizhinong/p/11530527.html
Copyright © 2011-2022 走看看