HTTP PUT-запрос к API Bitbucket - PullRequest
2 голосов
/ 23 июня 2011

Я хочу разработать java-библиотеку для доступа к API-интерфейсу для проблем с разрядностью.
Я уже задавал вопрос о вычислении заголовка HTTP Content-Length , но этот вопрос конкретно о API Bitbucket и процесс обновления проблемы (поскольку каждый другой запрос работает хорошо).

Следующий код не работает, выдавая ошибку 411 Length Required.
Но дажеболее запутанно: в документации вам предлагается использовать PUT метод запроса.Если вы «забыли» указать это, код состояния изменится на 200 OK, но проблема останется неизменной.

public class PutTest {
    public static void main(String[] args) throws Exception {
        URL u = new URL("https://api.bitbucket.org/1.0/repositories/myname/myproject/issues/1/?title=hello+world");
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.addRequestProperty("Authorization", "Basic "+Base64.encodeToString("user:password".getBytes(), false));
        c.addRequestProperty("Content-Length", String.valueOf(u.getQuery().getBytes("UTF-8").length));
        c.setRequestMethod("PUT");
        c.connect();
        System.out.println(c.getResponseCode()+" "+c.getResponseMessage());
    }
}

1 Ответ

1 голос
/ 02 августа 2011

Мой обновленный пример кода работает, с помощью другого вопроса в stackoverflow: Как отправить запрос PUT, DELETE HTTP в HttpURLConnection? Похоже, не работает .

Использование соединения OutputStream работает.

public class PutTest {

    public static void main(String[] args) throws Exception {
        URL u = new URL("https://api.bitbucket.org/1.0/repositories/myname/myproject/issues/1/");
        HttpURLConnection c = (HttpURLConnection) u.openConnection();
        c.addRequestProperty("Authorization", "Basic "+Base64.encodeToString(("user:password").getBytes(), false));
        c.setRequestMethod("PUT");
        c.setDoOutput(true);
        OutputStreamWriter out = new OutputStreamWriter(c.getOutputStream());
        out.write("title=hello+world");
        out.close();
        c.connect();
        System.out.println(c.getResponseCode()+" "+c.getResponseMessage());
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...