Python “问题”;远程端关闭连接,无响应“;创建多个会话时

Python “问题”;远程端关闭连接,无响应“;创建多个会话时,python,python-3.x,python-requests,Python,Python 3.x,Python Requests,以下是我的情况: 当我使用for循环登录某个REST网站大约100~500次时,如果我使用requests.post方法来处理我的请求,requests-freamwork总是发出标题错误。代码如下: # coding: UTF-8 """ @Author: ITACHY @CreateTime:2018/12/19 17:26 """ import datetime import uuid import requests def login_test(num): star

以下是我的情况:

当我使用for循环登录某个REST网站大约100~500次时,如果我使用requests.post方法来处理我的请求,requests-freamwork总是发出标题错误。代码如下:

# coding: UTF-8  
"""
@Author:    ITACHY
@CreateTime:2018/12/19 17:26
"""
import datetime
import uuid
import requests


def login_test(num):
    start = datetime.datetime.now()
    url = XXXXX
    uid = str(uuid.uuid4())
    body = {
        "type": "login",
        "clientinfo":
            {
                "deviceid": uid,
                "uid": uid,
                "timezone": "Asia/Shanghai",
                "osFamily": "ANDROID",
                "osVersion": "22",
                "deviceType": "MOBILE",
                "deviceModel": "1.0",
                "appVersion": "1.0.0-SNAPSHOT",
                "location":
                    {
                        "longitude": 116.407394,
                        "latitude": 39.904211,
                        "type": "GCJ02"
                    }
            }
    }
    header = {
        'Content-Type': 'application/json; charset=UTF-8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # response = requests.post(url, json = body, headers = header)
    response = requests.post(url, json = body, headers = header)
    if response.status_code == 200:
        result = response.json()
        print('Count: {}, Result: {}'.format(num, result))
        if result["code"] == 0:
            due = datetime.datetime.now() - start
            print('Count: {}, Uid: {}, Token: {}, Time; {}, '.format(str(i), uid, result["data"]["accessToken"], str(due)))
        else:
            due = datetime.datetime.now() - start
            print('Count: {}, Uid: {}, Response: {}, Time: {}, '.format(str(i), uid, result, str(due)))
    else:
        print('Count: {}, Login failed. Code: {}, Msg: {}'.format(num, response.status_code, response.text))


if __name__ == '__main__':

    for i in range(500):
        login_test(i)
但当我将代码更改为以下内容时:

# coding: UTF-8
"""
@Author:    ITACHY
@CreateTime:2018/12/19 17:26
"""
import datetime
import uuid
import requests


# import logging


def login(count, session):
    start = datetime.datetime.now()
    url = XXXXXXX
    uid = str(uuid.uuid4())
    body = {
        "type": "login",
        "clientinfo":
            {
                "deviceid": uid,
                "uid": uid,
                "timezone": "Asia/Shanghai",
                "osFamily": "ANDROID",
                "osVersion": "22",
                "deviceType": "MOBILE",
                "deviceModel": "1.0",
                "appVersion": "1.0.0-SNAPSHOT",
                "location":
                    {
                        "longitude": 116.407394,
                        "latitude": 39.904211,
                        "type": "GCJ02"
                    }
            }
    }
    header = {
        'Content-Type': 'application/json; charset=UTF-8',
        'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/70.0.3538.110 Safari/537.36'
    }
    # try:
    # response = requests.post(url, json = body, headers = header)
    response = session.post(url, json = body, headers = header)
    if response.status_code == 200:
        result = response.json()
        # print(result)
        if result["code"] == 0:
            due = datetime.datetime.now() - start
            print('Count: {}, Uid: {}, Token: {}, Time; {}, '.format(str(count), uid, result["data"]["accessToken"], str(due)))
        else:
            due = datetime.datetime.now() - start
            print('Count: {}, Uid: {}, Response: {}, Time: {}, '.format(str(count), uid, result, str(due)))
    else:
        print('Login failed. Code: {}, Msg: {}'.format(response.status_code, response.text))
    # except Exception as e:
    #     print(e)


if __name__ == '__main__':
    with requests.Session() as session:
        for i in range(5000):
            login(i, session)

一切进展顺利,我认为第二种方法只创建一个会话,第一种方法创建很多会话,请检查。提前感谢如果有人可以确认

如果您遇到此问题,请在真正的网站之前检查是否有NGINX代理,如果有,请尝试直接连接到该网站,因为当前问题的大量案例都是“代理”造成的

我在抓取一些网页并使用
请求时遇到了相同的错误。get

在我的代码中添加
try
后,我的错误消失了

顺便说一句:服务器在ApacheNginx后面,由SpringWebFlux REST风格编写,容器处于拖曳状态。