python - 断网后如何继续请求发帖

标签 python python-3.x python-requests

with open("student.csv", "r") as csv_ledger:
    r = csv.DictReader(csv_ledger)
    data = [dict(d) for d in r ]
    groups = {}

    for k, g in groupby(data, lambda r: (r['name'])):
        items = []
        for i in g:
        #data processing
        try:
           post_api = requests.post(ENDPOINT_URL, json=groups, headers=headers)
        except requests.ConnectionError:
              print("Something went wrong")
        finally:
              print("resume post request")

目前,当互联网连接断开时,我的代码将无法恢复发布请求。如果我使用 try 和异常,它就不起作用。

最佳答案

不确定您是否可以在没有服务器端实现的情况下按照您想要的方式恢复,但您可以从客户端恢复。这是一个简单的阻塞示例,但您可能希望将其放入线程中。

import csv
import socket
from time import sleep

import requests


def is_internet_on():
    try:
        socket.setdefaulttimeout(3)
        socket.socket(socket.AF_INET, socket.SOCK_STREAM).connect(('1.1.1.1', '8080'))
        return True
    except:
        return False


def do_call_later(url, headers, body):
    while not is_internet_on():
        sleep(5)
    requests.post(url, headers=headers, body=body)


with open("student.csv", "r") as csv_ledger:
    r = csv.DictReader(csv_ledger)
    data = [dict(d) for d in r]
    groups = {}

    for k, g in groupby(data, lambda r: (r['name'])):
        items = []
        for i in g:
            # data processing
            pass
        try:
            timeout_arg = (
                # first tuple value is the connection timeout,
                # how long to wait before initial connection is established
                1.0,
                # second tuple value is the read timeout, this is how long
                # the client will wait after the initial connection
                # before dropping the connection because no response was sent
                1.0
            )
            post_api = requests.post(ENDPOINT_URL, json=groups, headers=headers, timeout=timeout_arg)
        except requests.ConnectionError:
            do_call_later(ENDPOINT_URL, headers, groups)
        finally:
            print("resume post request")

编辑:超时调用的文档:https://github.com/kennethreitz/requests/blob/master/requests/api.py#L34

关于python - 断网后如何继续请求发帖,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55519658/

相关文章:

python - 使用并发 future python 3.5 处理大文件的最快方法

python-3.x - PySpark:随机化数据框中的行

Python Mechanize 连接失败问题

python - 如何使用 file.upload 和 requests 将文件上传到 slack

python - 对于循环网络抓取网站会出现超时错误、新连接错误和 requests.exceptions.ConnectionError

python - MySQL:如何使用 JSON 数据搜索字段?

python - lgb.train ValueError : The truth value of an array with more than one element is ambiguous. 使用 a.any() 或 a.all()

python - Boto3:如何获取从 Spot 请求创建的实例 ID?

python - 有没有办法在 PIL 中用黑线勾勒出文本轮廓?

python - pandas 在每个组中找到满足特定条件的行的索引并为这些行分配值