【问题标题】:add a value to a json body request in python在python中为json正文请求添加一个值
【发布时间】:2020-09-30 04:24:34
【问题描述】:

我创建了自己的函数,我导入了时间戳,它返回两个值:

from requests.auth import HTTPBasicAuth
import requests
import json


def timeframe():
    response = requests.get("https://$host/api/profiler/1.13/reporting/timestamps.json", verify=False, auth=HTTPBasicAuth("admin", "admin"))
    time = response.json()
    for entry in time:
        if entry.get('data_resolution') == 'min':
            if entry.get('datasource') == 'FDS_TRAFFIC':
                start_time = entry['start_time']
                end_time = entry['end_time']
                return start_time, end_time

timeframe()

我需要为 json 正文请求中的键添加时间戳,您将看到“结束”和“开始”键。我需要检索这些时间戳并以某种方式将它们添加到这些键中。

    import requests
import timestamp
from requests.auth import HTTPBasicAuth
import urllib3

urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

stamp = timestamp.timeframe()

print(stamp)

url = 'http://10.65.170.112/api/profiler/1.12/reporting/reports'
headers = {'Content-Type': 'application/json'}
payload = {
    "criteria": {
        "time_frame": {
            "start": str(stamp[0]),
            "end": str(stamp[1]),
            "resolution": "flow"
        },
        "query": {
            "realm": "traffic_flow_list",
            "sort_column": 41,
            "devices": [
        {
          "ipaddr": "10.65.170.2"
        }
      ],
            "group_by": "flw",
            "columns": [
                729,
                40,
                41,
                14,
                44,
                10,
                45,
                46
            ]
        }
    },
    "template_id": 184
}

req = requests.post(url,  headers=headers, data = payload, verify=False, auth=HTTPBasicAuth('admin', 'admin'),)

print(req.status_code, req.text)

不知道该怎么办。

谢谢

【问题讨论】:

  • 您的问题到底是什么?你能解释一下你想做什么吗?
  • @komatiraju032 您会在正文中看到“结束”和“开始”需要提交数据,这是一个 POST 请求,您也会看到我导入时间戳(这是确切的时间我需要填写的印章)不确定我该如何适应,该功能对身体
  • 你可以试试"end": timestamps[1]"start": timestamps[0]
  • @komatiraju032 谢谢伙计,但它没有用,我的意思是我得到 HTTP 200 说明它不接受该值,所以当它返回响应时我没有得到我想要的。
  • timestamp.timeframe()的输出是什么

标签: python json api rest


【解决方案1】:

Tudo bem?

您创建的函数返回一个元组:return start_time, end_time

因此,一种实现方式是:

start, end = timestamp.timeframe()

然后,您可以为身体补水:

body = {  
    "criteria": {  
        "time_frame": {  
            "end": end,  
            "start": start,  
            "resolution": "flow" 
},

我希望这会有所帮助。

【讨论】:

  • Ola Raphael, fucionou, mas , nao funcionou, ou seja, ele devolve HTTP 200, mas o report que percisa de ser gerado nao e aceite por cause dos parametros nao serem inseridos。恢复。 ele ate funciona mas ele nao esta a aceitar os timestamps que perciso
  • 奥拉·亚历山大。 Entao, o problema nao esta no "assignment of values", mas sim aqui: time = response.json() Voce poderia confirmar qual e o output do response.json()?
  • 我在你的另一篇文章中看到回复是:``` [ { "data_resolution": "min", "datasource": "TRAFFIC", "end_time": 1591793520, "start_time ": 0 }, { "data_resolution": "day", "datasource": "TRAFFIC", "end_time": 1591743600, "start_time": 0 }, ] ``` 当然,你正在寻找这个索引:` `` { "data_resolution": "min", "datasource": "FDS_TRAFFIC", "end_time": 1591793520, "start_time": 1587220140 }, ``
  • 您的脚本在我本地运行时有效。我用 json 响应替换了您的 time 变量(在您的 timeframe() 方法上)。我得到以下信息:开始:1587220140 和结束:1591793520。
  • 嗨 Rafa,谢谢,但我无法通过 json 响应并将其分配给 TIME,因为时间戳每分钟更新一次,因此我需要先查询获取响应并从中提取值 i需要
【解决方案2】:
import requests
import timestamp
from requests.auth import HTTPBasicAuth
import urllib3
import json
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)

stamp = timestamp.timeframe()
auth = HTTPBasicAuth("admin", "admin")

url = "https://$host/api/profiler/1.13/reporting/reports"

headers = {'Content-Type': 'application/json'}

payload = {
    "criteria": {
        "time_frame": {
            "start": stamp[0],
            "end": stamp[1],
            "resolution": "flow"
        },
        "query": {
            "realm": "traffic_summary",
            "sort_column": 41,
            "devices": [{ "ipaddr": "10.65.170.2"}],
            "group_by": "hos",
            "columns": [
                729,
                40,
                41,
                14,
                44,
                10,
                45,
                46
            ]
        }
    },
    "template_id": 184
}

req = requests.post(url, verify=False, auth=auth, headers=headers, data=json.dumps(payload))

print(req.headers)

已通过添加 data=json.dump(payload) 解决

【讨论】:

    猜你喜欢
    • 2017-08-06
    • 2021-06-28
    • 1970-01-01
    • 1970-01-01
    • 2021-09-02
    • 2021-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多