Я создаю API для отдыха django и пытаюсь отправить данные JSON через запрос PUT с устройства Android, используя HttpUrlConnection.
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, который говорит, что файл cookie csrf имеет такое же значение.
V/Apiput﹕ csrftoken=3jLNzfLIu1P5dBH4WWwggHMH7oDQC7Rx
Я получаю ошибку 403 (Forbidden) Http, кроме того, что пользователь аутентифицирован (я могу делать запросы GET)
[26/Sep/2015 00:16:04]"PUT /api/works/34/ HTTP/1.1" 403 58
С помощью curl я могу без проблем отправить запрос с теми же учетными данными пользователя.
Интересно, может ли кто-нибудь сказать мне, что я делаю неправильно.
Спасибо.