Java 中的 MailChimp 集成
Posted
技术标签:
【中文标题】Java 中的 MailChimp 集成【英文标题】:MailChimp Integration in Java 【发布时间】:2016-10-15 05:05:18 【问题描述】:我想在我的 java 项目中集成 MailChimp API。当我使用 HttpURLConnection 类调用 Rest 调用时,它会响应 401 代码。
这是我的代码:
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();
【问题讨论】:
【参考方案1】:我建议使用Apache Commons Codec 包进行编码。 支持Base64、16进制等多种格式。
早些时候我也面临同样的问题。我正在分享我在应用程序中用于验证 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 = "Anything over here!";
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 Object sb 来解析输出
希望它能解决您的问题:)
【讨论】:
【参考方案2】:HTTP 401 response code 表示“未授权”。
您没有正确设置或传递您的凭据。是否设置了来自客户端的证书?这是 HTTPS 客户端的example。
【讨论】:
您好,感谢您的及时回复。是的,我知道问题出在传递 api 密钥的方式上。我检查了 MailChimp api,他们没有任何关于如何在 Java 中传递 api 密钥进行授权的示例。 这是 HTTP,所以我的第一个猜测是设置 HTTP 基本身份验证标头。 MailChimp API 使用基本身份验证。世界上有大量的 Java 示例,例如 this one。 我尝试了这些东西,但它仍然返回 401 状态。我不确定我是否遗漏了 MailChimp api 的任何内容。【参考方案3】:HTTP 401 仅表示您无权发送此请求。
您可以设置 用户名 任何字符串(MailChimp 文档建议使用 anystring
作为用户名)和您的 API 密钥作为密码。
如果是 Postman 请求,您可以在 Authorization 选项卡下选择Basic Auth
设置用户名和密码。下图显示相同。
有关在 MailChimp API 3.0 上向邮件列表添加/获取成员的更多信息,我发现 this article 非常有用。
【讨论】:
以上是关于Java 中的 MailChimp 集成的主要内容,如果未能解决你的问题,请参考以下文章