簡體   English   中英

Android-將主體添加到StringRequest時Flask出現Volley錯誤400

[英]Android - Volley error 400 from Flask when adding body to StringRequest

如果我沒有任何要求地發送請求,則一切正常。 無論如何,當我添加主體時,出現錯誤400。主體是一個JSON轉換為String

請求:

StringRequest stringRequest = new StringRequest(Request.Method.POST, URL, new Response.Listener<String>() {
    @Override
    public void onResponse(String response) {
        key=response;
    }
 }, new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            Toast.makeText(getApplicationContext(),"Fail database",Toast.LENGTH_SHORT).show();
            Log.d("tuzzo","err: "+error);
        }
   }
}){
        @Override
        public Map<String, String> getHeaders() throws AuthFailureError {
            Map<String, String> params = new HashMap<String, String>();
            params.put("Content-Type", "application/json");
            return params;
        }

        @Override
        protected Map<String, String> getParams() throws AuthFailureError {
            SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
            SimpleDateFormat myFormat = new SimpleDateFormat("dd/MM/yyyy", Locale.ITALY);
            Map<String, String> params = new HashMap<>();
            params.put("nameEx", String.valueOf(prefs.getString("exhtitle",null)));
            params.put("descrEx", String.valueOf(prefs.getString("exhdescr",null)));
            params.put("longDescr", String.valueOf(longdescr.getText()));

            params.put("idCategories", String.valueOf(catmap.get(String.valueOf(spin_cat.getText()).toLowerCase())));
            try {
                params.put("startDate", myFormat.format(myFormat.parse(startDate.getText().toString())));
                params.put("endDate", myFormat.format(myFormat.parse(endDate.getText().toString())));
            }catch (ParseException e){
                Log.e("testdate","error: "+e);
            }
            params.put("idMuseums", String.valueOf(musmap.get(String.valueOf(spin_mus.getText()).toLowerCase())));
            params.put("chiave", String.valueOf(prefs.getString("exhkey",null)));
            return params;
        }
        @Override
        public byte[] getBody() throws AuthFailureError {
            try {
                return full == null ? null : full.getBytes("utf-8");
            } catch (UnsupportedEncodingException uee) {
                Log.d("volleyuee", "uee: "+uee);
                return null;
            }
        }
        @Override
        public String getBodyContentType() {
            return "application/json; charset=utf-8";
        }
    };

我的帶有Flask的Python服務器:

def upd():
data = request.data

if not os.path.exists("/home/tuzzo/stg/res/%s"%request.form['chiave']):
    os.makedirs("/home/tuzzo/stg/res/%s"%request.form['chiave'])
    os.makedirs("/home/tuzzo/stg/res/%s/download"%request.form['chiave'])
    os.makedirs("/home/tuzzo/stg/res/%s/header"%request.form['chiave'])
    if not data is None:
        with open('/home/tuzzo/stg/res/%s/download/jsonEx.json'%request.form['chiave'], 'w') as outfile:
            simplejson.dump(data, outfile)
        with open('/home/tuzzo/stg/res/%s/manifest.xml'%request.form['chiave'], 'w') as xmlfile:
            xmlfile.write("<?xml version=\"1.0\" encoding=\"UTF-8\"?><channel><item><json>http://tuzzo.pythonanywhere.com/download/"+request.form['chiave']+"/jsonEx.json</json></item></channel>")
    addEx(request.form['chiave'])
    return request.form['chiave']

如果我在參數中發送String並使用data = request.form[value]則它可以工作,但我不知道此請求中缺少什么。

默認情況下,燒瓶視圖僅響應GET請求,除非您有一個路由裝飾器指定它們也應響應POST(或任何其他類型)。 像這樣:

@app.route('/something', methods=['GET', 'POST'])
def view():
   ... view code ...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM