我正在尝试从twilio服务获取短信,但不断收到此错误。
请求:
func SMSRequest(countryCode:String, phoneNumber: String) {
let accountSid = "ACc4d9785419f144412823ff2034660c3d"
let authToken = "a2293a42841f8999caa237er363" // changed
let phoneNumber = "+14243960339"
let toNumber = "+37378847884"
let url = URL(string: "https://\(accountSid):\(authToken)@api.twilio.com/2010-04-01/Accounts/\(accountSid)/SMS/Messages")
print("url", url!)
let parameters = [
"From": phoneNumber,
"To": toNumber,
"Body":"Hi daddy"
]
Alamofire.request(url!, method: .post, parameters: parameters,
encoding: JSONEncoding.default, headers: [:]).responseJSON { response in
let response = String(describing: response.result.ifFailure({
print(response)
if let data = response.data, let utf8Text = String(data: data, encoding: .utf8) {print("Data: \(utf8Text)")}
}))
}
}
错误:
<TwilioResponse><RestException><Code>21603</Code><Message>A 'From' phone number is required.</Message><MoreInfo>https://www.twilio.com/docs/errors/21603</MoreInfo><Status>400</Status></RestException></TwilioResponse>
All the credentials I get from here
解决方案: 使用utf8编码。
答案 0 :(得分:0)
Twilio开发者传道者在这里。
重要的是要注意,即使你已经解决了问题,你也在构建一个根本不安全的应用程序。我离开了this comment on your other question,但我也需要在这里指出。
我们不建议您直接从本机应用程序向Twilio API发出请求。为此,您需要在应用程序中的某个位置存储或检索您的帐户SID和身份验证令牌。如果您这样做,那么恶意攻击者可以访问您的凭据并滥用您的Twilio帐户。
这实际上称为Eavesdropper vulnerability and was written about earlier this year。
相反,我们建议您创建一个Web应用程序并从那里发送API请求。有关如何在此处执行此操作的博文:https://www.twilio.com/blog/2016/11/how-to-send-an-sms-from-ios-in-swift.html
答案 1 :(得分:0)
Swift 4的更新-您实际上不需要指定编码,只需将其保留为默认设置即可。
关于Twilio的回答,他们不应说人们“不应”向其API发出请求,而应删除该功能本身并在其SDK上提供适当的身份验证服务。目前,这是我发现的最佳解决方案。
let accountSID = "BOB"
let authToken = "BOB'S PASSWORD"
let url = "https://api.twilio.com/2010-04-01/Accounts/\(accountSID)/Messages" as URLConvertible
let parameters = ["From": "SENDER", "To": "RECIPIENT", "Body": "Hello world!"]
Alamofire.request(url, method: .post, parameters: parameters)
.authenticate(user: accountSID, password: authToken)
.responseString { response in
debugPrint(response)
}