3

我正在尝试在 bibucket 上创建新问题,但我不知道如何使用 http。我尝试了很多东西,但它仍然不起作用。这是我的尝试之一:

URL url = new URL("https://api.bitbucket.org/1.0/repositories/" 
        + accountname + "/" + repo_slug + "/issues/"
        + "?title=test&content=testtest");

HttpsURLConnection request = (HttpsURLConnection) url.openConnection();       
request.setRequestMethod("POST");
consumer.sign(request);
request.connect();

我对 GET 请求没有问题。但是在这里我不知道如何发送参数并签署消息。

这是 API https://confluence.atlassian.com/display/BITBUCKET/issues+Resource#issuesResource-POSTanewissue的文档

如何正确执行此操作?

4

2 回答 2

2

最后我想通了。参数不是 URL 的一部分,但如果您使用流,则无法对其进行签名。

解决方案是使用 Apache HttpComponents 库并添加如下代码中的参数:

    DefaultHttpClient httpclient = new DefaultHttpClient();
    HttpPost httpPost = new HttpPost("https://api.bitbucket.org/1.0/repositories/"
            + accountname + "/" + repo_slug + "/issues/");
    List<NameValuePair> nvps = new ArrayList<NameValuePair>();
    nvps.add(new BasicNameValuePair("title", "test"));
    nvps.add(new BasicNameValuePair("content", "testtest"));
    httpPost.setEntity(new UrlEncodedFormEntity(nvps));
    consumer.sign(httpPost); 
    HttpResponse response2 = httpclient.execute(httpPost);

    try {
        System.out.println(response2.getStatusLine());
        HttpEntity entity2 = response2.getEntity();
        // do something useful with the response body
        // and ensure it is fully consumed
        EntityUtils.consume(entity2);
    } finally {
        httpPost.releaseConnection();
    }

}

但是您必须使用 CommonsHttpOAuthConsumer,它位于 commonshttp 的特殊路标库中。

于 2013-01-30T17:33:15.313 回答
1

我已经看到您已经解决了,但是这里说您需要使用 OAuth 进行身份验证,并且在您链接的页面中,您需要进行身份验证才能创建新问题。它还链接到此页面以获取多种语言的 OAuth 实施。我将它发布为知识。

于 2013-02-11T01:50:25.183 回答