回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>Web2Py POST失败</p>
<p>将一些字典数据发布到Web2py。某些数据发布总是成功的,而某些数据发布总是失败的</p>
<p>此数据始终成功发布:</p>
<pre><code>data = {"batt chrg": {
"dat": "-999%",
"measurement": "percent",
"unit": "electric",
"entrytype": "subunitStatus"
},
"pv gen": {
"dat": "-999 W",
"measurement": "level",
"unit": "electric",
"entrytype": "subunitStatus"
}
}
</code></pre>
<p>此数据(较长的字典)始终无法发布:</p>
<pre><code>data = {"download": {
"entrytype": "subunitStatus",
"dat": "9 Mbit/s",
"measurement": "level",
"unit": "comms"},
"batt chrg": {
"entrytype": "subunitStatus",
"dat": "94.4%",
"measurement": "percent",
"unit": "electric"},
"pv gen": {
"entrytype": "subunitStatus",
"dat": "543 W",
"measurement": "level",
"unit": "electric"},
"living space": {
"entrytype": "subunitStatus",
"dat": "72 F",
"measurement": "level",
"unit": "hvac"},
"ping": {
"entrytype": "subunitStatus",
"dat": "60 ms",
"measurement": "level",
"unit": "comms"},
"invert load": {
"entrytype": "subunitStatus",
"dat": "402 W",
"measurement": "level",
"unit": "electric"},
"humidity": {
"entrytype": "subunitStatus",
"dat": "45%",
"measurement": "level",
"unit": "hvac"},
"upload": {
"entrytype": "subunitStatus",
"dat": "8 Mbit/s",
"measurement": "level",
"unit": "comms"
}
}
</code></pre>
<p>客户端python代码:</p>
<pre><code>import requests
from requests.auth import HTTPBasicAuth
from datetime import datetime
import json
auth=HTTPBasicAuth('LoginID', 'Password')
unitid = '19700111'
uploaded = 'no'
data = {
'unitid': unitid,
'uploaded': uploaded,
'time_stamp': str(datetime.now()),
'data_list': json.dumps(data),
}
rq = requests.post(
"https://XXXXX.pythonanywhere.com/XXX/default/api/packed_data.json",
data=data,
auth=auth,
headers={'Connection':'close'}
)
</code></pre>
<p>以下是(标准)服务器端Web2py代码:</p>
<pre><code>def api():
response.view = 'generic.'+request.extension
def GET(*args,**vars):
patterns = 'auto'
parser = db.parse_as_rest(patterns,args,vars)
if parser.status == 200:
return dict(content=parser.response)
else:
raise HTTP(parser.status,parser.error)
def POST(table_name,**vars):
return db[table_name].validate_and_insert(**vars)
def PUT(table_name,record_id,**vars):
return db(db[table_name]._id==record_id).update(**vars)
def DELETE(table_name,record_id):
return db(db[table_name]._id==record_id).delete()
return dict(GET=GET, POST=POST, PUT=PUT, DELETE=DELETE)
</code></pre>
<p>失败返回“Response 200”,但没有任何内容写入数据库</p>