Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google cloud platform 如何在Python3&;中使用HTTP桥发布到GCP发布/子主题;卷曲_Google Cloud Platform_Google Cloud Functions_Google Cloud Pubsub_Google Cloud Iot - Fatal编程技术网

Google cloud platform 如何在Python3&;中使用HTTP桥发布到GCP发布/子主题;卷曲

Google cloud platform 如何在Python3&;中使用HTTP桥发布到GCP发布/子主题;卷曲,google-cloud-platform,google-cloud-functions,google-cloud-pubsub,google-cloud-iot,Google Cloud Platform,Google Cloud Functions,Google Cloud Pubsub,Google Cloud Iot,我正在尝试使用python3&CURL通过HTTP桥发布到一个pub/sub主题 **Python3** import json import logging import os import socket import sys import time import requests URL = 'https://cloudiotdevice.googleapis.com/v1/projects/{}/locations/{}/registries/{}/devices/{}:publishE

我正在尝试使用python3&CURL通过HTTP桥发布到一个pub/sub主题

**Python3**

import json
import logging
import os
import socket
import sys
import time
import requests
URL = 'https://cloudiotdevice.googleapis.com/v1/projects/{}/locations/{}/registries/{}/devices/{}:publishEvent'
JWT = 'JWT'

def main():
    if not URL or not JWT:
        sys.exit("Are the Environment Variables set?")
    get_sensor_data(socket.gethostname())
def get_sensor_data(device_id):
    while True:
        print("in get_sensor data")
        payload = {'device': str('asd'),
                   'type': str('adssaff'),
                   'timestamp': str(time.time()),
                   'data': json.dumps({'temperature': str('23'),
                            'humidity': str('442')})}
        post_data(payload)
        print("data printed")
        time.sleep(5)
def post_data(payload):
    payload = json.dumps(payload)
    headers = {
        'Content-Type': 'application/json; charset=utf-8',
        'Authorization': JWT
    }
    try:
        req = requests.post(URL, json=str(payload), headers=headers)
        print("request Successfull "+str(req))
    except requests.exceptions.ConnectionError:
        logging.error('Error posting data to Cloud Function!')
    except requests.exceptions.MissingSchema:
        logging.error('Error posting data to Cloud Function! Are Environment Variables set?')
if __name__ == '__main__':
这是一个错误400,因为我想我还没有描述子文件夹。 现在我很困惑,在我的代码中哪里可以定义子文件夹(主题名)? 是否只缺少子文件夹?或者我也做错了什么

卷曲

我还尝试使用中描述的CURL命令

命令是

curl -X POST -H 'authorization: Bearer JWT' -H 'content-type: application/json' --data '{"binary_data": "DATA", "sub_folder": "SUBFOLDER"}' -H 'cache-control: no-cache' 'https://cloudiotdevice.googleapis.com/v1/projects/{project-id}/locations/{cloud-region}/registries/{registry-id}/devices/{device-id}:publishEvent'

它触发了我的云功能,这意味着授权有效,但我无法在日志中看到“数据”。我假设我没有为二进制数据提供正确的格式。如果我也想使用curl发布上面描述的“有效负载”,那么什么是正确的格式呢

看起来您正在使用JSON负载,并将
数据
字段设置为对象,而不是二进制
字符串
。尝试将
json.dump
对象转储到
'data'
字段中,或者将
'data'
字段作为字符串发送。

看起来您使用的是将
data
字段设置为对象的json负载,而不是二进制
字符串
。尝试将
json.dump
对象转储到
'data'
字段中,或将
'data'
字段作为字符串发送。

来自此文档。

我发现我的有效载荷请求正文不正确

所以有效载荷应该如下所示

s= json.jumps('json object')
payload = {"subFolder": 'Sub_FOLDER_NAME', "binaryData": base64.b64encode(s.encode('utf-8'))}
从本文档中。

我发现我的有效载荷请求正文不正确

所以有效载荷应该如下所示

s= json.jumps('json object')
payload = {"subFolder": 'Sub_FOLDER_NAME', "binaryData": base64.b64encode(s.encode('utf-8'))}

您是指Curl还是python?@Hsn我指的是带有
payload
的python代码,它将
数据作为JSON对象发送。我相信将
数据
字段序列化为字符串可能是解决您问题的答案。我正在使用json.dumps作为有效负载,并尝试发送字符串。但仍然是400error@Hsn你能分享一下代码吗?有效负载将是字符串,但是有效负载的
数据部分也必须是字符串,而不是字符串object@Hsn您共享的代码仍然没有将
数据
字段编码为字符串。确保像这样将
json.dumps
添加到
data
字段中
'data':json.dumps({'temperature':str('23'),'hyperty':str('442')}})
您是引用Curl还是python?@Hsn我指的是作为json对象发送
数据的带
有效负载的python代码。我相信将
数据
字段序列化为字符串可能是解决您问题的答案。我正在使用json.dumps作为有效负载,并尝试发送字符串。但仍然是400error@Hsn你能分享一下代码吗?有效负载将是字符串,但是有效负载的
数据部分也必须是字符串,而不是字符串object@Hsn您共享的代码仍然没有将
数据
字段编码为字符串。确保将
json.dumps
添加到
data
字段中,如下所示
'data':json.dumps({'temperature':str('23'),'weathy':str('442')})