2016-06-14 7 views
0

私のJavaプロジェクトにMailChimp APIを統合したい。 HttpURLConnectionクラスを使ってRest Callを呼び出すと、401コードで応答します。ここでMailChimpとJavaの統合

私のコードです:

URL url = new URL("https://us13.api.mailchimp.com/3.0/lists"); 
HttpURLConnection conn = (HttpURLConnection) url.openConnection(); 

conn.setDoOutput(true); 
conn.setRequestMethod("POST"); 
conn.setRequestProperty("Content-Type", "application/json"); 
conn.setRequestProperty("Authorization", "apikey <my-key>"); 

String input = "<json data>"; 

OutputStream os = conn.getOutputStream(); 
//os.write(input.getBytes()); 
os.flush(); 

if (conn.getResponseCode() != HttpURLConnection.HTTP_CREATED) { 
    throw new RuntimeException("Failed : HTTP error code : " + conn.getResponseCode()); 
} 

BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream()))); 

String output; 
System.out.println("Output from Server .... \n"); 
while ((output = br.readLine()) != null) { 
    System.out.println(output); 
} 

conn.disconnect(); 

答えて

0

HTTP 401 response code "許可され​​ていません" という意味。

資格情報を正しく設定または渡しませんでした。クライアントからの証明書が設定されていますか?ここにはHTTPSクライアントのexampleがあります。

+0

こんにちは、お返事ありがとうございます。はい、私は問題がAPIキーを渡す方法であることを知っています。 MailChimp APIをチェックしたところ、JavaでAPIキーを渡して認証する方法の例はありません。 – user3759750

+0

それはHTTPだから私の最初の推測はHTTPの基本認証ヘッダーを設定することです。 – duffymo

+0

MailChimp APIは基本認証を使用します。 [this one](http://stackoverflow.com/questions/4883100/how-to-handle-http-authentication-using-httpurlconnection)のように、世界にそれのJavaの例がたくさんあります。 – TooMuchPete

2

Apache Commons Codecパッケージを使用してエンコードすることをおすすめします。 Base64や16進数などのさまざまな形式をサポートしています。

私も同じ問題に直面していました。私は必要な

が、それはあなたのISSUを解決ホープとして今、あなたは出力を解析するためにStringBuilderオブジェクトSBを使用することができ、私はMailchimpのAPIのV-3.0

//basic imports 
import org.apache.commons.codec.binary.Base64; 
. 
. 
. 
//URL to access and Mailchimp API key 
String url = "https://us9.api.mailchimp.com/3.0/lists/"; 
//mailchimp API key 
String apikey = xxxxxxxxxxxxxxxxxxxxxxxxxxx 

// Authentication PART 

String name = "it doesn't matter :o ?"; 
String password = apikey;  //Mailchimp API key 
String authString = name + ":" + password; 

byte[] authEncBytes = Base64.encodeBase64(authString.getBytes()); 
String authStringEnc = new String(authEncBytes); 

URL urlConnector = new URL(url); 
HttpURLConnection httpConnection = (HttpURLConnection)   urlConnector.openConnection(); 
httpConnection.setRequestMethod("GET"); 
httpConnection.setDoOutput(true); 
httpConnection.setDoInput(true); 
httpConnection.setRequestProperty("Content-Type", "application/json; charset=UTF-8"); 
httpConnection.setRequestProperty("Accept", "application/json"); 
httpConnection.setRequestProperty("Authorization", "Basic " + authStringEnc); 

InputStream is1 = httpConnection.getInputStream(); 
StringBuilder sb = new StringBuilder(); 
BufferedReader br = new BufferedReader(new InputStreamReader(is1, "utf-8")); 

String line = null; 
while ((line = br.readLine()) != null) { 
    sb.append(line + "\n"); 
      } 
br.close(); 

への認証のために自分のアプリケーションで使用されるコードを共有しています:)