我在下面写了这段代码:
@url_api.route("/add")
class AddIPvFour(Resource):
""" this class contains functions to add new url.
"""
def post(self):
"""
Add a new URL map to IP or update exisitng.
:return: json response object status of newly added ip to url mapped
or updated exisintg ip to url map.
"""
apiAuth = None
data = request.get_json(force=True)
if not data:
return jsonify({"status": "no data passed"})
if not data["ip"]:
return jsonify({"status" : "please pass the new ip you want to update"})
# becuase if user has registered his API key must exist.
if not data["apikey"]:
return jsonify({"status": "missing API KEY"})
apiAuth = models.APIAuth.get_apiauth_object_by_key(data["apikey"])
if not apiAuth:
return jsonify({"status": "invalid api key"})
# if user exists get table name
user_table_name = helpers.get_table_name(apiAuth.email)
if not helpers.table_exists(user_table_name):
user_table = helpers.create_user_table(user_table_name)
else:
user_table = helpers.get_user_table(user_table_name)
# if same ip exists external port address should not exist in mapped in db.
query_table = helpers.get_query_result(user_table_name, "ipaddress", data['ip']).fetchall()
ports_mapped_to_ip_in_db = [item[5] for item in query_table]
if int(data['port']) in ports_mapped_to_ip_in_db:
return jsonify({"status": "{}:{} is already registered.".format(data["ip"], data["port"])})
device = ""
service = ""
path = ""
ipaddress = data["ip"]
if "port" in data:
port = data["port"]
else:
port = 80
if "device" in data:
device = data["device"]
if "service" in data:
service = data["service"]
if "path" in data:
path = data["path"]
date_modified = datetime.now(tz=pytz.timezone('UTC'))
urlmap = str(uuid.uuid4().get_hex().upper()[0:8])
field_values = {
"ipaddress": ipaddress,
"urlmap": urlmap,
"port" : port,
"device": device,
"service": service,
"date_created": date_modified,
"date_modified" :date_modified,
"path" : path,
"count_updates": 1 if not hasattr(user_table, "count_updates") else user_table.count_updates + 1
}
helpers.insert_to_table(user_table, field_values)
result = helpers.get_query_result(user_table_name, "urlmap", urlmap)
return jsonified(result.fetchone())
但是当我尝试获取时:
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' 'http://127.0.0.1:5000/api/add?API_KEY=cJRuOJyD2QdJpFpugf1QwrROKEuhSX80cRGLW6hoAC0&ip=127.0.0.1'
我试图调试,我认为我得到了错误
data = request.get_json(force=True)
但为什么我要传递 JSON 格式!-d
但是,如果我使用标志传递数据。
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' 'http://127.0.0.1:5000/api/add' -d '{"API_KEY":"cJRuOJyD2QdJpFpugf1QwrROKEuhSX80cRGLW6hoAC0", "ip":"127.0.0.1", "port":"4260"}'
有用。它也应该与
curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' 'http://127.0.0.1:5000/api/add?ip=127.0.0.2&API_KEY=cJRuOJyD2QdJpFpugf1QwrROKEuhSX80cRGLW6hoAC0'
终端或使用一起使用http://127.0.0.1:5000/api/add?ip=127.0.0.2&API_KEY=cJRuOJyD2QdJpFpugf1QwrROKEuhSX80cRGLW6hoAC0
,我最终得到
{
"message": "Failed to decode JSON object: No JSON object could be decoded"
}