【问题标题】:MailChimp Integration in JavaJava 中的 MailChimp 集成
【发布时间】: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();

【问题讨论】:

    标签: java rest mailchimp mailchimp-api-v3.0


    【解决方案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 非常有用。

      【讨论】:

        猜你喜欢
        • 2014-07-14
        • 2012-03-10
        • 2013-04-27
        • 2012-03-22
        • 2021-07-16
        • 2016-06-01
        • 2016-01-10
        • 2021-02-25
        • 2023-03-09
        相关资源
        最近更新 更多