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 集成的主要内容,如果未能解决你的问题,请参考以下文章

使用 API 将 Mailchimp 集成到 Laravel

将 mailchimp 与 nuxt js 应用程序集成

将 rails 与 mailchimp 集成

AJAX Mailchimp 注册表单集成

将 MailChimp 与 Django 用户工作流集成

用于电子书下载的 MailChimp 和 Wordpress 集成