for x, i, j, k, l in product(range(2, 11), range(12, 21), range(7, 11), range(2, 11), range(1, 3)): data["normalSpeed"] = i / 3.6 data["turningFarmToolCtrlSpeed"] = x / 3.6 data["minTurningRadius"] = j data["breadth"] = k data["jobType"] = l for block_type in ["小地块", "中地块", "大地块"]: if block_type == "小地块": data["map"]["outerbd"] = outerbd_small data["map"]["entrance"] = entrance_small data["map"]["exit"] = exit_small elif block_type == "中地块": data["map"]["outerbd"] = outerbd_middle data["map"]["entrance"] = entrance_middle data["map"]["exit"] = exit_middle else: data["map"]["outerbd"] = outerbd_large data["map"]["entrance"] = entrance_large data["map"]["exit"] = exit_large json_str = json.dumps(data) res = requests.post(url, json_str).text filename = os.path.join(e_path_file, f'normalSpeed={i}, turningFarmToolCtrlSpeed={x}, minTurningRadius={j}, breadth={k}, ' f'jobType={l}, {block_type}.txt') with open(filename, 'w') as file: file.write(res) print(f'写入成功,速度为{i},转弯速度为{x},转弯半径为{j},幅宽为{k},作业模式为{l},{block_type}') logger.info(f'写入成功,速度为{i},转弯速度为{x},转弯半径为{j},幅宽为{k},作业模式为{l},{block_type}') if block_type == "小地块": time.sleep(5) plot_route_from_file(filename, f'normalSpeed={i}, turningFarmToolCtrlSpeed={x}, minTurningRadius={j}, breadth={k}, ' f'jobType={l}, {block_type}', error_flag, success_flag, outerbd_small) elif block_type == "中地块": time.sleep(10) plot_route_from_file(filename, f'normalSpeed={i}, turningFarmToolCtrlSpeed={x}, minTurningRadius={j}, breadth={k}, ' f'jobType={l}, {block_type}', error_flag, success_flag, outerbd_middle) else: time.sleep(15) plot_route_from_file(filename, f'normalSpeed={i}, turningFarmToolCtrlSpeed={x}, minTurningRadius={j}, breadth={k}, ' f'jobType={l}, {block_type}', error_flag, success_flag, outerbd_large) 这样发送post请求有时候会报错requests.exceptions.ConnectionError: ('Connection aborted.', LineTooLong('got more than 65536 bytes when reading status line'))。这是为什么,怎么解决
时间: 2024-04-15 07:30:44 浏览: 134
radar para.rar_radar range_so2rz_雷达作用距离_雷达威力_雷达灵敏度
这个错误通常是由于请求正文过大而导致的。HTTP 协议规定,请求行和头部信息的总大小不能超过一个限制,默认情况下是 65536 字节(64KB)。当请求的内容超过这个限制时,就会引发 `LineTooLong` 异常。
要解决这个问题,你可以尝试以下几种方法:
1. 优化请求数据大小:检查 `data` 对象中的数据量,确保请求数据不是过大的。如果可能,减小请求体的大小,可以通过只发送必要的数据或者压缩数据来减少请求的大小。
2. 使用 `stream` 参数:将 `requests.post()` 函数的 `stream` 参数设置为 `True`,以便将响应以流式方式获取,而不是一次性获取完整响应。这样可以避免一次性读取过长的响应导致的问题。
```python
res = requests.post(url, json_str, stream=True)
content = res.raw.read(65536) # 按需读取响应内容
```
3. 分块发送请求:如果请求数据太大,可以将数据分成多个小块进行发送,每次发送一部分数据。使用 `requests.post()` 函数的 `data` 参数发送分块数据。
```python
chunk_size = 1024 # 每次发送的数据块大小
for chunk in chunks(json_str, chunk_size):
res = requests.post(url, data=chunk)
# 处理响应...
```
`chunks()` 函数是一个辅助函数,用于将数据拆分成指定大小的块。
```python
def chunks(data, chunk_size):
return (data[i:i+chunk_size] for i in range(0, len(data), chunk_size))
```
请根据你的具体情况选择适合的解决方案,并进行尝试。如果问题仍然存在,请检查网络连接是否稳定,或者是否有其他网络相关的问题。
阅读全文