[英]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.