我正在创建一个django rest api,并且我正尝试使用HttpUrlConnection通过来自Android设备的PUT请求发送JSON数据。执行PUT请求时的HTTP 403
URL url = new URL(myurl);
conn = (HttpURLConnection) url.openConnection();
conn.setReadTimeout(10000 /* milliseconds */);
conn.setConnectTimeout(15000 /* milliseconds */);
conn.setRequestMethod("PUT");
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setRequestProperty("Content-Type", "application/json; charset=UTF-8");
conn.setRequestProperty("Accept", "application/json");
Log.v("Apiput", MainActivity.cookieManager.getCookieStore().getCookies().get(0).toString());
conn.connect();
if(conn.getResponseCode() != 200) {
return "" + conn.getResponseCode();
}
OutputStreamWriter osw = new OutputStreamWriter(conn.getOutputStream());
osw.write(put);
osw.flush();
osw.close();`
我知道我必须发送一个csrf令牌,但我认为我已经发送了它。 通过我的要求检查META我可以看到CSRF无论是在头和cookie标记:
'HTTP_COOKIE': 'csrftoken=3jLNzfLIu1P5dBH4WWwggHMH7oDQC7Rx;'
而且在我的Android设备,我有那么CookieManager,指出CSRF饼干有相同的值。
V/Apiput﹕ csrftoken=3jLNzfLIu1P5dBH4WWwggHMH7oDQC7Rx
我得到一个403(禁止)HTTP错误之外的用户进行身份验证(我可以让GET请求)
[26/Sep/2015 00:16:04]"PUT /api/works/34/ HTTP/1.1" 403 58
,卷曲我能够发送请求,而不任何问题,具有相同的用户凭据。
我想知道有没有人能告诉我我做错了什么。
谢谢。
尝试从ContentType中删除“; charset = UTF-8”。当DRF是ContentType的一部分时,我遇到了DRF挑选正确解析器的问题。 –