2016-06-06 3 views
-1

Я пытаюсь отправить запрос PUT из приложения Java на сервер. Я успешно отправляю запросы GET, POST и DELETE, но PUT один не удастся (я получаю ошибку 401 с приведенным ниже кодом, 405 Ошибка с другим кодом, используя HttpPut пакета apache). Я использую java.net.HttpURLConnection, вот небольшая область моего кода:Java Http request PUT: 401 неавторизованный

URL obj = new URL(urlPost); 

HttpURLConnection con = (HttpURLConnection) obj.openConnection(); 

//add request header 
con.setRequestMethod(typeRequest); //typeRequest = PUT 

String credentials = adminOC + ":" + pwdOC; 
String encoding = Base64.encode(credentials.getBytes("UTF-8")); 
con.setRequestProperty("Authorization", String.format("Basic %s", encoding)); 

if (!typeRequest.equals("GET")){ 
    con.setDoOutput(true); 
    try (DataOutputStream wr = new DataOutputStream(con.getOutputStream())) { 
     wr.writeBytes(postParam); 
     wr.flush(); 
    } 
} 
if (con.getResponseCode() == 200){ 
    try (BufferedReader in = new BufferedReader(
     new InputStreamReader(con.getInputStream()))) { 
     String inputLine; 
     while ((inputLine = in.readLine()) != null) { 
      response += inputLine; 
     } 
    } 
} 

Я пытался посылать свои параметры Помещенный «POST» способом, а также непосредственно в URL. Кажется, что это ошибка из моего кода Java, а не с сервера, потому что я пытался выполнить запрос PUT с помощью cURL, и это сработало.

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

+0

Вы могли бы сделать это с помощью локон? –

+0

где вы задаете имя метода PUT? –

+0

@Nicolas Да, следующий curl cmd отлично работает: curl -X "PUT" -u login: pwd http: //myadress/testdeploy/ocs/v1.php/cloud/users/john -d key = "email" - d value = "[email protected]" – Icedsky

ответ

0

Отсутствует в вашем коде con.setRequestProperty("Content-Type", "application/x-www-form-urlencoded")