尝试使用api将diff上传到ReviewBoard时获得400-BAD REQUEST

时间:2017-11-22 10:51:21

标签: httpurlconnection multipartform-data review-board

我已使用api在ReviewBoard上创建了审核请求,但我现在无法将diff文件添加到此审核请求中。

我正在按照ReviewBoard说明向ReviewBoard API发送POST请求 - > https://www.reviewboard.org/docs/manual/2.0/webapi/2.0/resources/diff-list/

我的请求标题如下所示

{Content-Type: multipart/form-data; boundary=------- 1511347017267}{Accept: application/xml}{Authorization: token 4937d...sometoken...584b23}

我的请求正文如下所示

------- 1511345733192
Content-Disposition: form-data; name="basedir"

/trunk_projectABC/
------- 1511345733192
Content-Disposition: form-data; name="path"; filename="build.diff"
Content-Type: text/xml

Index: utility/build.bat
===================================================================
--- utility/build.bat   (revision 67210)
+++ utility/build.bat   (working copy)
@@ -10,8 +10,8 @@
 echo off
 set thpcra=false
 set patchBuild=false
-set help=true
-set clientBuild=true
+set help=false
+set clientBuild=false
 set runJavaTestCases=false
 set buildpath="%BUILD_PATH%"
 set jdkpath="%JDK_17%"
------- 1511345733192 --

我在这里找到了另一个问题 review board diff not uploading 并确保repo URL + basedir + relative path设置正确,但我仍然从服务器获得BAD REQUEST响应。

注意:我使用tortoiseSVN工具生成差异 我正在使用HttpURLConnection conn = (HttpURLConnection) url.openConnection();

有关我为何从服务器获取BAD REQUEST的任何输入?

1 个答案:

答案 0 :(得分:0)

回答我自己的问题。

我正在使用PrintWriter在连接输出流上编写请求正文。可能使用流引入任何额外的字符或以某种方式使请求主体格式不正确,但这就是我收到错误请求的原因。

我现在正在使用MultipartRequestEntity来创建请求正文。这是代码段

PostMethod method = new PostMethod(apiURL);
File diff = new File("D:/path_to_diff/build.diff");
partsList.add(new FilePart("path", diff.getName(), diff));
partsList.add(new StringPart("basedir", "/trunk_projectABC/"));
Part[] parts = partsList.toArray(new Part[partsList.size()]);
RequestEntity entity = new MultipartRequestEntity(parts, method.getParams());
method.setRequestEntity(entity);

这可以在审核请求

上运行并上传差异文件