3

bibucket で新しい問題を作成しようとしていますが、http の操作方法がわかりません。私は多くのことを試みますが、それでもうまくいきません。これは私の試みの1つです:

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();
    }

}

ただし、commonshttp 用の特別な標識ライブラリにある CommonsHttpOAuthConsumer を使用する必要があります。

于 2013-01-30T17:33:15.313 に答える
1

既に解決済みであることがわかりましたが、ここでは、OAuth で認証する必要があると表示されており、リンクしたページでは、新しい問題を作成するために認証する必要があることが示されています。また、多くの言語の OAuth 実装については、このページにリンクしています。知識のために投稿します。

于 2013-02-11T01:50:25.183 に答える