You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java调用Twilio SMS API报缺少'To'手机号错误的问题咨询

问题根因

你的表单请求体编码逻辑存在错误:你将拼接好的完整参数字符串To=%s&From=%s&Body=%s整体做了URL编码,导致参数键值分隔符=、参数间分隔符&都被转义为特殊编码字符,Twilio服务端解析请求体时无法拆分出独立的参数键,自然识别不到To参数,最终返回21604报错。
你当前逻辑生成的请求体实际内容为:

To%3D%2B1123456789%26From%3D%2B1223456789%26Body%3DHello

服务端会将这整串内容识别为一个无键名的参数值,完全读取不到To、From、Body这些表单字段。

修复方法

URL编码只需要作用在每个参数的具体值上,编码完成后再用=连接键和编码后的值,用&连接不同键值对,最终生成合法的application/x-www-form-urlencoded格式请求体。

修正后可运行代码
var url = UriBuilder.fromUri(
                "https://api.twilio.com/2010-04-01/Accounts/MyAccount/Messages.json").build();

// 单独对每个参数值做URL编码
String encodedTo = URLEncoder.encode("+1123456789", StandardCharsets.UTF_8);
String encodedFrom = URLEncoder.encode("+1223456789", StandardCharsets.UTF_8);
String encodedBody = URLEncoder.encode("Hello", StandardCharsets.UTF_8);
String formBody = String.format("To=%s&From=%s&Body=%s", encodedTo, encodedFrom, encodedBody);

var request = HttpRequest.newBuilder(url)
                             .headers("Authorization", "Basic " + base64,
                                      "Content-Type", "application/x-www-form-urlencoded")
                             .POST(HttpRequest.BodyPublishers.ofString(formBody))
                             .build();

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

try {
    var response = httpClient.send(request, HttpResponse.BodyHandlers.ofString());
    // 调试时可打印状态码和响应内容排查问题
    System.out.println(response.statusCode());
    System.out.println(response.body());
} catch (IOException | InterruptedException e) {
    throw new RuntimeException(e);
}
注意事项
  • 代码中URL路径里的MyAccount占位符需要替换为你自己的Twilio账号Account SID
  • 发信使用的From号码必须是你在Twilio后台已完成购买、验证的有效号码,否则会触发权限类报错
  • Basic认证的凭据对为「你的Account SID作为用户名,Auth Token作为密码」,注意不要泄露Auth Token

内容的提问来源于stack exchange,提问作者Georgi Georgiev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 20:54:34