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