socket_http

import socket
from urllib.parse import urlparse
import time

def get_url(url):
    # 通过socket请求html
    url = urlparse(url)  # 解析url
    host = url.netloc  # 获取ip地址
    path = url.path  # 相对主路径下的请求路径
    if path == "":
        path = "/"

    # 建立socket连接
    client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)  # 创建socket连接
    # client.setblocking(False)
    client.connect((host, 80))  # 阻塞不会消耗cpu

    # 不停的询问连接是否建立好, 需要while循环不停的去检查状态
    # 做计算任务或者再次发起其他的连接请求

    client.send(
        "GET {} HTTP/1.1\r\nHost:{}\r\nConnection:close\r\n\r\n".format(path, host).encode("utf8"))  # 通过\r\n 添加请求头信息

    data = b""
    while True:
        d = client.recv(1024)
        if d:
            data += d
        else:
            break

    data = data.decode("utf8")  # data包含请求头信息和返回的响应数据
    html_data = data.split("\r\n\r\n")[1]  # 通过\r\n\r\n  讲请求头信息和响应数据分开
    print(html_data)
    client.close()

if __name__ == "__main__":

    start_time = time.time()
    for url in range(20):
        url = "http://shop.projectsedu.com/goods/{}/".format(url)
        get_url(url)
    print(time.time() - start_time)

  

socket_http的更多相关文章

  1. Transfer-Encoding: chunked

    Http1.1中 使用 chunked 编码传送时 没有CONTENT_LENGTH,下载之前无法确定要下载的大小. Wininet中已经内嵌该传输协议,要查看chunked块的大小只能socket底 ...

  2. socket 模拟 HTTP请求

    一.socket介绍 网络由下往上分为物理层.数据链路层.网络层.传输层.会话层.表示层和应用层.IP协议对应于网络层,TCP协议对应于传输层,而HTTP协议对应于应用层.socket则是对TCP/I ...

  3. JAVA,模拟HTTP登录(略有修改) ----转载自http://zhoujingxian.iteye.com/blog/439738

    /* * 网上的一个模拟登录或者模拟注册程序 * 2013-8-5 */ package Socket_Http; import java.io.BufferedReader; import java ...

随机推荐

  1. SpringMVC拦截器(四)

    拦截器,本质类似于AOP,主要的应用场景: 日志记录:记录请求信息的日志,以便进行信息监控.信息统计.计算PV等. 权限检查:如登录检测,进入处理器检测是否登录,没有登录返回登录页面. 性能监控:记录 ...

  2. Django2.2报错 django.core.exceptions.ImproperlyConfigured: mysqlclient 1.3.13 or newer is required; you have 0.9.3.

    准备将 Django 连接到 MySQL,在命令行输入命令 python manage.py makemigrations 后报错: django.core.exceptions.Improperly ...

  3. NOIP模拟赛 拓展

    题目描述 Description \(φ\) 函数是数论中非常常用的函数.对于正整数 \(x\) ,\(φ(x)\) 表示不超过 \(x\) 的所有正整数与 \(x\) 互质的个数. 现在我们对它进行 ...

  4. 考试总结T2(接上次整的T1)

    首先说一句,树的每个元素的名称的问题,(那个叫jie点的东西) 具体是节点还是结点...baidu百科写的是结点... 本文章将不考虑到底这俩字怎么写...所以两种都可能出现 T2描述: 扶苏翻遍了歌 ...

  5. ActiveMQ基础使用

    概述 ActiveMQ是由Apache出品的,一款最流行的,能力强劲的开源消息总线.ActiveMQ是一个完全支持JMS1.1和J2EE 1.4规范的 JMS Provider实现,它非常快速,支持多 ...

  6. Oracle数据库的关键系统服务整理

    在Windows 操作系统下安装Oracle 9i时会安装很多服务——并且其中一些配置为在Windows 启动时启动.在Oracle 运行在Windows 下时,有些服务可能我们并不总是需要但又害怕停 ...

  7. Office365激活方法(无需密钥)

    @echo off title Activate Office 365 ProPlus for FREE - MSGuides.com&cls&echo =============== ...

  8. 【前端知识体系-JS相关】深入理解MVVM和VUE

    1. v-bind和v-model的区别? v-bind用来绑定数据和属性以及表达式,缩写为':' v-model使用在表单中,实现双向数据绑定的,在表单元素外使用不起作用 2. Vue 中三要素的是 ...

  9. Spring源码系列 — Envoriment组件

    何为Envoriment Envoriment是集成在Spring上下文容器中的核心组件,在Spring源码中由Envoriment接口抽象. 在Environment中,有两大主要概念: Profi ...

  10. 【04】Nginx:rewrite / if / return / set 和变量

    写在前面的话 我们前面已经谈了编译安装,基本语法,日志处理,location 匹配,root / alias 的不同效果.这里我们主要谈谈 rewrite(重写)功能,顺便说说 nginx 中自带的变 ...