Я пытался создать (или загрузить) файл в репозиторий Bitbucket Server, установленный в нашей организации, с помощью собственного сценария Groovy. Я понял, что для API просмотра требуются данные, состоящие из нескольких частей, и мне было трудно работать с HttpURLConnection, чтобы это произошло. После множества проб и ошибок я теперь получаю код возврата 500, но у меня нет доступа к журналам сервера.
Вот командная строка curl, которая отлично работает:
curl -X PUT -u chris:xxxxx -F content="I want this content to show up in the file" -F message="Updated via curl" -F branch=master https://stash.myorg.com/stash/rest/api/1.0/users/chris/repos/myRepo/browse/sometext.txt
Выполнял ли кто-нибудь действие POST или PUT для составных данных с использованием собственных библиотек Groovy (или той же библиотеки в Java)? Я избегаю зависимых библиотек, потому что работаю в большой организации, где это может вызвать трудности.
Вот мой код на данный момент ...
// Local variables
StringBuilder formData = new StringBuilder("\n")
basicAuth = "Basic Y3NoZXJpAAAvcmNlZZdha2VuczA3"
// Create URL
URL url = ("https://stash.myorg.com/stash/rest/api/1.0/users/chris/repos/myRepo/browse/sometext.txt").toURL()
// Open connection
HttpURLConnection connection = url.openConnection()
connection.setRequestMethod("PUT")
connection.setDoOutput(true)
connection.setRequestProperty("Content-Type", "multipart/form-data")
connection.setRequestProperty("Accept", "application/json")
connection.setRequestProperty ("Authorization", basicAuth)
// manually build form data, a complete hack
formData.append(addData("content", "I want this content to show up in the file"))
formData.append(addData("message", "Posted via Bitbucket API"))
formData.append(addData("branch", "master"))
// write input
connection.getOutputStream().write(formData.toString().getBytes("UTF-8"))
def postRC = connection.getResponseCode()
if(postRC.equals(200)) {
println(connection.getInputStream().getText())
}
else {
println(connection.getErrorStream().getText())
}
// function to support manual form building - again a complete hack
private String addData(String key, String value) {
StringBuilder sb = new StringBuilder('Content-Disposition: form-data; name="')
sb.append(key)
sb.append("\n\n")
sb.append(value)
sb.append("\n\n")
return sb.toString()
}