我想开发一个java库,用于解决比特桶问题API访问
我已经问过一个关于HTTP Content-Length头的计算的问题,但这个问题特别是关于Bitbucket API和更新问题的过程(因为其他所有请求都能很好地工作)。
以下代码不起作用,导致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());
}
}
我更新的代码示例在stackoverflow的另一个问题的帮助下工作:如何在HttpURLConnection中发送PUT、DELETE HTTP请求?看起来不起作用。
利用连接的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());
}
}