我正在尝试用python random包构造一些数据,并使用requests包将其作为表单数据发送。出于测试目的,我将此内容发送到httpbin.org以查看响应。
sensor.py
import time, requests
import pandas as pd
from datetime import date, datetime
import random, json
def json_serial(obj):
"""JSON serializer for objects not serializable by default json code"""
if isinstance(obj, (datetime, date)):
return obj.isoformat()
raise TypeError ("Type %s not serializable" % type(obj))
stuff = {}
stamp = json_serial(datetime.now())
elctricMeterReading = (random.random() * 440) - 15
stuff['Date'] = stamp
stuff['MeterReading'] = elctricMeterReading
print(stuff)
r = requests.post('https://httpbin.org/post', data=stuff)
#r = requests.post('http://localhost:5000/datainform', params=stuff)
print("Status code: ", r.status_code)
print("Printing Entire Post Request")
print(r.json())在下面来自httpbin的响应中,我可以看到'form': {'Date': '2020-06-18T11:42:31.408767', 'MeterReading': '179.49598690916307'},那么我如何在Flask App上使用它呢?
httpbin.org响应:
Status code: 200
Printing Entire Post Request
{'args': {}, 'data': '', 'files': {}, 'form': {'Date': '2020-06-18T11:42:31.408767', 'MeterReading': '179.49598690916307'}, 'headers': {'Accept': '*/*', 'Accept-Encoding': 'gzip, deflate', 'Content-Length': '67', 'Content-Type': 'application/x-www-form-urlencoded', 'Host': 'httpbin.org', 'User-Agent': 'python-requests/2.21.0', 'X-Amzn-Trace-Id': 'Root=1-5eeb9977-4144b1b998be98a1a47d6934', 'X-B3-Parentspanid': 'a327575ce788b35a', 'X-B3-Sampled': '0', 'X-B3-Spanid': '097957453d58e94e', 'X-B3-Traceid': '101a34ed0555e0f4a327575ce788b35a', 'X-Envoy-External-Address': '207.171.103.240', 'X-Forwarded-Client-Cert': 'By=spiffe://cluster.local/ns/httpbin-istio/sa/httpbin;Hash=ea1c0e0fbd1a2a4dcfdc36e743ce618cf614b92afb4e5a6b19e7ba9a2ac7ecdb;Subject="";URI=spiffe://cluster.local/ns/istio-system/sa/istio-ingressgateway-service-account'}, 'json': None, 'origin': '207.171.103.240,10.100.91.201', 'url': 'https://httpbin.org/post'}如果我为我的Flask应用程序使用sensor.py (注释掉httpbin.org),这会抛出一个错误:werkzeug.exceptions.HTTPException.wrap.<locals>.newcls: 400 Bad Request: KeyError: 'Date'
Flask App代码:
from flask import Flask, make_response, request, render_template, jsonify, make_response
import pandas as pd
from sqlalchemy import create_engine
from pandas.api.types import is_string_dtype
from pandas.api.types import is_numeric_dtype
import requests
app = Flask(__name__)
@app.route('/datainform', methods=['POST'])
def getdatatwo():
stamp = request.form['Date']
meterReading = request.form['MeterReading']
#outTemp = request.form['outTemp']
print('Date',stamp)
print('MeterReading',meterReading)
return 'OK', 200
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)任何建议都非常感谢...
发布于 2020-06-20 01:56:31
经过更多的测试。我不是很确定为什么,但是将这个添加到Flask应用程序中似乎工作得很好……result = request.form,但如果没有它,代码将出错..
下面是完整的脚本:
@app.route('/datainform', methods=['POST'])
def getdatatwo():
result = request.form
print(result)
stamp = request.form['Date']
meterReading = request.form['MeterReading']
#outTemp = request.form['outTemp']
print('Date',stamp)
print('MeterReading',meterReading)
return 'OK', 200
if __name__ == '__main__':
app.run(host='0.0.0.0',debug=True)https://stackoverflow.com/questions/62455268
复制相似问题