繁体   English   中英

Twilio “需要一个‘收件人’电话号码。” Java HttpRequest

[英]Twilio "A 'To' phone number is required." Java HttpRequest

我正在尝试将请求从 Java 发送到 Twilio SMS API。 我正在使用java.net.http包:

var url = UriBuilder.fromUri(
                "https://api.twilio.com/2010-04-01/Accounts/MyAccount/Messages.json").build();

var urlEncodedBody = URLEncoder.encode(String.format("To=%s&From=%s&Body=%s",
                                                         "+1123456789",
                                                         "+1223456789",
                                                         "Hello"),
                                           StandardCharsets.UTF_8);
var request = HttpRequest.newBuilder(url)
                             .headers("Authorization", "Basic " + base64,
                                      "Content-Type", "application/x-www-form-urlencoded")
                             .method("POST", HttpRequest.BodyPublishers.ofString(
                                     urlEncodedBody))
                             .build();

HttpClient httpClient = HttpClient.newBuilder().build();

try {
            var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
} catch (IOException |
                InterruptedException e) {
            throw new RuntimeException(e);
}

我不断收到错误响应:

{"code": 21604, "message": "A 'To' phone number is required.", "more_info": "https://www.twilio.com/docs/errors/21604", "status": 400}

知道我错过了什么吗?

我认为,当您对请求的正文进行编码时,您也在对& s 和= s 进行编码,因此它似乎只是一个字符串。

This answer on a different question建议使用Map并依次编码每个值。 以此为基础,您可以将字符串格式替换为:

Map<String, String> parameters = new HashMap<>();
parameters.put("To", "+1123456789");
parameters.put("From", "+1223456789");
parameters.put("Body", "Hello");

String urlEncodedBody = parameters.entrySet()
    .stream()
    .map(e -> e.getKey() + "=" + URLEncoder.encode(e.getValue(), StandardCharsets.UTF_8))
    .collect(Collectors.joining("&"));

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM