2016-06-14 51 views
0

我想将MailChimp API集成到我的Java项目中。当我使用HttpURLConnection类调用Rest调用时,它使用401代码进行响应。Java中的MailChimp集成

这里是我的代码:

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使用基本身份验证。世界上有很多java的例子,比如[this](http://stackoverflow.com/questions/4883100/how-to-handle-http-authentication-using-httpurlconnection)。 – TooMuchPete

2

我会建议使用Apache Commons Codec包进行编码。它支持各种格式,如Base64和十六进制。

此前我也面临同样的问题。我分享,我在我的应用程序用于验证到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(); 

现在你可以使用StringBuilder对象某人解析输出需要

希望它的代码解决您的ISSU :)