python通过Keep-Alive保持IP不变,向多个页面发出请求,通过多线程实现并发控制

#! -*- encoding:utf-8 -*-
import requests
import random
import requests.adapters
import threading # 导入threading模块
import time # 导入time模块

# 要访问的目标页面
targetUrlList = [
    "https://httpbin.org/ip",
    "https://httpbin.org/headers",
    "https://httpbin.org/user-agent",
]

# 代理服务器(产品官网 www.16yun.cn)
proxyHost = "t.16yun.cn"
proxyPort = "31111"

# 代理验证信息
proxyUser = "username"
proxyPass = "password"
proxyMeta = f"http://{
     proxyUser}:{
     proxyPass}@{
     proxyHost}:{
     proxyPort}"

# 设置 http和https访问都是用HTTP代理
proxies = {
   
    "http": proxyMeta,
    "https": proxyMeta,
}

# 定义一个全局变量,用于记录上一次请求的时间
last_request_time = 0

# 定义一个全局变量,用于创建一个线程锁
lock = threading.Lock()

# 定义一个函数,用于访问一个目标网址
def visit_url(url, i):
    global last_request_time # 声明全局变量
    with requests.session() as s: # 使用with语句管理会话
        with lock: # 使用线程锁
            # 获取当前时间
            current_time = time.time()
            # 计算距离上一次请求的时间差
            delta_time = current_time - last_request_time
            # 如果时间差小于200毫秒,就等待一段时间
            if delta_time < 0.2:
                time.sleep(0.2 - delta_time)
            # 更新上一次请求的时间
            last_request_time = time.time()
        # 发送请求
        r = s.get(url, proxies=proxies)
        print(f"第{
     i+1}个网址,结果如下:") # 使用f-string格式化输出
        print(r.text)

# 创建一个空的线程列表
threads = []
for i, url in enumerate(targetUrlList): # 使用enumerate函数遍历列表
    # 创建一个线程,传入目标网址和索引
    t = threading.Thread(target=visit_url, args=(url, i))
    # 将线程添加到线程列表
    threads.append(t)
    # 启动线程
    t.start()
# 等待所有线程结束
for t in threads:
    t.join()

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-01-25 04:00:08       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-01-25 04:00:08       106 阅读
  3. 在Django里面运行非项目文件

    2024-01-25 04:00:08       87 阅读
  4. Python语言-面向对象

    2024-01-25 04:00:08       96 阅读

热门阅读

  1. Numpy库:常用函数

    2024-01-25 04:00:08       52 阅读
  2. springboot项目之开启简单定时任务

    2024-01-25 04:00:08       48 阅读
  3. Redis学习笔记

    2024-01-25 04:00:08       53 阅读
  4. pc端vue封装高德地图实现定位 PlaceSearch搜索

    2024-01-25 04:00:08       63 阅读
  5. linux和windows对比

    2024-01-25 04:00:08       48 阅读
  6. matlab查看源代码

    2024-01-25 04:00:08       63 阅读
  7. Package g++ is not configured yet.

    2024-01-25 04:00:08       57 阅读
  8. ABC337(A-C)

    2024-01-25 04:00:08       54 阅读
  9. 死锁面试题详解

    2024-01-25 04:00:08       52 阅读
  10. Koa框架

    2024-01-25 04:00:08       58 阅读
  11. JVM实战(29)——模拟栈内存溢出

    2024-01-25 04:00:08       57 阅读