python - 使用python请求模块时未发送保持活动消息
问题描述
我观察到使用 python 请求模块,HTTP keep-alive 没有得到尊重。我没有看到从运行 python 脚本的主机发送 Acks for keep-alive。
请让我知道如何修复它。以下是我的代码:
import json
import requests
import logging
import sys
import time
from threading import Thread
logging.basicConfig(level=logging.DEBUG)
class NSNitro:
def __init__(self,*args):
if len(args) > 2:
self.ip = args[0]
self.username = args[1]
self.password = args[2]
self.session_id = None
url = 'http://'+self.ip+'/nitro/v1/config/login'
payload = { "login": { "username":"nsroot", "password":"nsroot" }}
headers = {"Content-type": "application/json", 'Connection': 'keep-alive'}
try:
r = requests.post(url=url,headers=headers,data=json.dumps(payload),timeout=5)
logging.info(r.json()["sessionid"])
if(r.json()["sessionid"] != None):
self.session_id = r.json()["sessionid"]
except requests.exceptions.RequestException:
logging.critical("Some error occurred during connection")
else:
logging.error("Not sufficient parameters provided.Required : ipaddress , username , password")
def install_build(self,build_url):
url = 'http://ip/nitro/v1/config/install'
headers = {"Content-type": "application/json","Connection": "keep-alive"}
payload = {"install": {"url": build_url}}
try:
cookie = {"NITRO_AUTH_TOKEN": self.session_id}
r = requests.post(timeout=5, url=url, data=json.dumps(payload), headers=headers,cookies=cookie)
except requests.exceptions.RequestException:
print("Connection Error occurred")
raise '''this will give details of exception'''
else:
assert r.status_code == 201, "Status code seen: " + str(r.status_code) + "\n" + "Error message from system: " + \
r.json()["message"]
print("Successfully triggered job on device to install build")
def __del__(self):
logging.debug("Deleted the object")
if __name__ == '__main__':
ns_session = NSNitro(ip,username,password)
url_i = 'https://myupload-server.net/build-13.0-480.16.tgz'
t1 = Thread(target=ns_session.install_build,args=(url_i,))
t1.start()
''' while t1.is_alive():
t2 = Thread(target=ns_session.get_installed_version,)
t2.start()
t2.join()'''
time.sleep(100)
logging.info("Install thread completed")
t1.join()
ns_session.logout()
当使用 curl 命令发布请求时,会以指定的保持活动间隔发送确认。在没有发送 ack 的情况下,服务器正在重置连接。
解决方案
推荐阅读
- c++ - 比较整数时 CppUnit::assertEquals 函数失败
- javascript - 为什么我的自定义 React 传单标记没有显示在我的地图上?
- firefox - WebRTC 是否会在没有用户交互的情况下泄露您的真实 IP?
- assembly - 为什么我的汇编级调试器以小端显示一些数据,而一些以大端显示?
- numba - 如何装饰以命名元组为参数的函数?
- git - 分阶段更改视觉工作室代码
- c - 如何检查数组元素是否为完美数字?
- javascript - 从 .txt 文件中取行并显示在 html 页面中
- assembly - 在跳转目的地基于动态环境值的情况下,如何构建控制流图?
- selenium - selenium.common.exceptions.WebDriverException:消息:无法使用 Selenium GeckoDriver 和 Firefox 浏览器连接到 Service geckodriver 错误