【问题标题】:python webhook, incoming gzip data - write to filepython webhook,传入的gzip数据 - 写入文件
【发布时间】:2021-01-08 18:37:23
【问题描述】:

对 python 很陌生,做了一些练习,现在正在尝试使用 API 和 webhoks。

我的目标:我有一个网络管理系统,每 120 秒可以根据附近客户端的 WiFi 可见性向我发送位置数据

我编写了这个简单的代码并获取传入数据 - 数据被压缩,所以我以二进制形式查看它们

from flask import Flask, request

app = Flask(__name__)

@app.route('/', methods=['POST'])
def index():
    print(request.headers)
    print(request.data)
 
    return ('This is a website. Port 443 - Https. ', 200, None)


if __name__ == '__main__':
    app.run(debug=True, use_reloader=True, ssl_context='adhoc', port=443)

结果是:

主机:e7145a924eea.eu.ngrok.io 用户代理:Java/1.8.0_251 内容长度:1940 接受:text/plain、application/json、application/x-jackson-smile、application/cbor、application/*+json、/ 授权:基本11223344 内容编码:gzip 内容类型:应用程序/json X-Ah-事件类型:位置 X-Ah-消息类型:LOCATION_CLIENT_CENTRIC X-Forwarded-For:1.2.3.4 X-Forwarded-Proto:https 接受编码:gzip

b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xed\x9cYO\x1bI\x10\x80\xff\xcbz\xa7\xfb6\xbf\xbb\xb9\xf9\x17\x91>x\xad\xfbt\x00\x00'

我只是想将二进制流写入文件,但如果我尝试做类似的事情

with open("D:\\Dati\python\\200_WebApps_and_webhooks\\API.gzip",'wb') as API_data:
        print(request.data, file=API_data)

我收到错误 TypeError: a bytes-like object is required, not 'str'

想法是将原始传入数据发送到可以解压缩以查看 json 格式的文件。

下一步将是即时解压缩并以这样的格式打印

......"bodyRaw":"{"messageMetaData":{"eventType":"LOCATION","messageType":"LOCATION_CLIENT_CENTRIC"},"data":{"ownerId":136502,"observations ":[{"clientMac":"aaabbbcccddd","ipv4":null,"ipv6":null,"seenTime":"2021-01-08T16:43:25.154Z","seenEpoch":1610124205154,"userName" :null,"authMethod":null,"ssid":null,"manufacturer":null,"os":null,"lat":0.0,"lng":0.0,"x":2.916691159714196,"y":1.9132701186769128 ,"clientMetaData":null,"deviceObservers":[{"apMac":"885BDD8B3E40","rssi":-74,"locationIdHierarchy":[586271625939276,586271625939269,586271625939267]}]},{"clientMac":"7825AD1136FC ","ipv4":null,"ipv6":null,"seenTime":"2021-01-08T16:43:25.163Z","seenEpoch":1610124205163,"userName":null,"authMethod":null," ssid":null,"制造商":null,"os":null,"lat":0.0,"lng":0.0,"x":13.302300953114472,"y":8.587561374795419,"clientMetaData":null,"deviceObservers" :[{"apMac":"885BDD8B3E40","rssi":-87,"locationIdHierarchy":[586271625939276,586271625939269,586271625939267]} ...省略..

提前致谢

佛朗哥

【问题讨论】:

    标签: python api binary webhooks raw-data


    【解决方案1】:

    在您的 with 块中,print 语句不会像您期望的那样工作。它用于将内容打印到服务器控制台。

    我认为您正在寻找类似的东西:

    with open("D:\\Dati\python\\200_WebApps_and_webhooks\\API.gzip",'wb') as API_data:
        API_data.write(request.data)
    

    【讨论】:

    • 谢谢,当然可以。当数据每 120 秒来自 API 源时,您会建议如何“动态”解码数据?谢谢
    【解决方案2】:

    使用 gzip.open() 打开 .gz 文件而不是“打开”

    import gzip
    with gzip.open(filepath,"rt") as API_data: # Unzipping and opening the file in text format
        for line in API_data:
            print(line) # Printing each line, you can save these lines to a file if you would like
    
    
    

    【讨论】:

      【解决方案3】:

      感谢您的提示,我使用两者进行了整理并编写了此示例代码

      from flask import Flask, request
      import gzip
      
      app = Flask(__name__)
      
      @app.route('/', methods=['POST'])
      def index():
          """
          Go to https://localhost to see a message
          """
      
          data = request.data
          print("data -> ", data)
      
          plaindata = gzip.decompress(data)
          print("decomp data ", plaindata)    
      
          return ('This is a website. Port 443 - Https. ', 200, None)
      
      
      if __name__ == '__main__':
          app.run(debug=True, use_reloader=True, ssl_context='adhoc', port=443)
      

      输出是

      数据 -> b'\x1f\x8b\x08\x00\x00\x00\x00\x00\x00\x00\xed[\xdbN\xe3H\x10\xfd\x17?g\xac\xbeWu\xde\ xecv\xb7\x16i\x06\xa4\x15O;B#o\xf0\x0e\x91 AI`w\x84\xf8\xf7\xadp\xd3\x0e....省略

      解压缩数据 b'{"messageMetaData":{"eventType":"LOCATION","messageType":"LOCATION_CLIENT_CENTRIC"},"data":{"ownerId":136502,"observations":[{"clientMac" :"A89CED7E3B77",....省略

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-12-22
        • 1970-01-01
        • 2018-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-01-21
        相关资源
        最近更新 更多