2015-09-25 5 views
1

Я создаю django rest api, и я пытаюсь отправить данные JSON через запрос PUT с устройства Android, используя HttpUrlConnection.HTTP 403 при выполнении запроса PUT

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 токен как в заголовках и печеньем:

'HTTP_COOKIE': 'csrftoken=3jLNzfLIu1P5dBH4WWwggHMH7oDQC7Rx;'

И в моем андроид устройства у меня есть CookieManager, который говорит, что CSRF печенье имеет то же значение.

V/Apiput﹕ csrftoken=3jLNzfLIu1P5dBH4WWwggHMH7oDQC7Rx

Я получаю 403 (Forbidden) Ошибка HTTP, кроме аутентификации пользователя (я могу сделать GET запросы)

[26/Sep/2015 00:16:04]"PUT /api/works/34/ HTTP/1.1" 403 58

С загнутым Я могу отправить запрос без любая проблема, с теми же учетными данными пользователя.

Интересно, может ли кто-нибудь сказать мне, что я делаю неправильно.

Спасибо.

+0

Попробуйте удалить "; charset = UTF-8" из ContentType. У меня были проблемы с выбором DRF правильного парсера, когда это часть ContentType. –

ответ

0

Вам не нужно устанавливать cookie, если вы выполняете вызов JSON в инфраструктуру Django REST. Это окончательно поможет, если вы можете предоставить разрешения, связанные с представлением.

+0

У меня есть ApiView с методами GET, PUT и POST с разрешением isAuthenticated. Я могу получить доступ к методу GET, но не могу получить доступ к PUT и POST. Я даже пытался изменить разрешение на AllowAny, но все равно не повезло. –

Смежные вопросы