我有一个Dart代码,用于通过POST方法向我的GAE WepApp2应用程序发送HttpRequest。飞镖代码以chrome执行,由Chrome开发编辑器提供。我在GAE代码中添加了一些标题,以避免客户端出现XHR错误。
dart代码将数据发送到我的GAE应用程序,但我无法使用 self.request.POST.get(“language”))读取数据,并且应用程序永远不会进入 def post(self):部分,但 self.request.body 我可以阅读数据。
你能解释一下并提供一些修正以获得完整的POST兼容代码吗?
镖:
void _saveData() {
HttpRequest request = new HttpRequest(); // create a new XHR
// add an event handler that is called when the request finishes
request.onReadyStateChange.listen((_) {
if (request.readyState == HttpRequest.DONE &&
(request.status == 200 || request.status == 0)) {
// data saved OK.
print(request.responseText);
}
});
// POST the data to the server
var url = "http://127.0.0.1:8080/savedata";
request.open("POST", url, async: false);
String jsonData = JSON.encode({"language":"dart"});
request.send(jsonData);
}
我的处理程序中的GAE代码:
def savedata(self):
logging.info("test")
logging.info(self.request.body)
logging.info(self.request.POST.get("language"))
def post(self):
logging.info("test 2")
logging.info(self.request.POST.get("language"))
self.response.headers["Access-Control-Allow-Origin"] = "http://127.0.0.1:49981"
self.response.headers["Access-Control-Allow-Methods"] = "POST, GET, OPTIONS"
答案 0 :(得分:1)
在Dart中,如果您没有指定 request.setRequestHeader(&#34; Content-Type&#34;,&#34; application / x-www-form-urlencoded&#34;)< / strong>在你的HttpRequest中,GAE认为数据就像一个咬合流,你只能用 self.request.body
来阅读它们。如果在Dart中添加Content-Type标头,则还需要更改数据格式。在我的情况下,我模仿使用POST方法发送的表单,因此我更改字符串jsonData = JSON.encode({&#34;语言&#34;:&#34; dart&#34;}); by 字符串jsonData =&#34;语言= dart2&#34;;
IN GAE python我现在可以用 self.request.POST.get(&#34;语言&#34;)
读取数据如果您需要从DART向GAE发送JSON,您可以对字符串进行编码,如下所示:
String jsonData = JSON.encode({"test":"valuetest1"});
String datas = "datas=$jsonData";
request.send(datas);
在GAE中你可以读取这样的数据:
my_json = json.loads(self.request.POST.get("datas"))
logging.info(my_json["test"])
完整的代码:
<强>达特强>
void _saveData2() {
String url = "http://127.0.0.1:8080/savedata";
HttpRequest request = new HttpRequest()
..open("POST", url, async: true)
..setRequestHeader("Content-Type", "application/x-www-form-urlencoded")
..responseType = "arraybuffer";
String jsonData = JSON.encode({"test":"valuetest1"});
String datas = "datas=$jsonData";
request.send(datas);
}
<强> GAE 强>
class PageHandler(webapp2.RequestHandler):
def savedata(self):
self.response.headers.add_header('Access-Control-Allow-Origin', '*')
self.response.headers['Content-Type'] = 'application/json'
#logging.info(self.request)
my_json = json.loads(self.request.POST.get("datas"))
logging.info(my_json["test"])