VoIP.ms 提供了從其 API 發送 SMS 文本訊息的能力。他們提供以下示例代碼:
<?
$postfields = array(
'api_username'=>'[email protected]',
'api_password'=>'password',
'method'=>'getServersInfo',
'server_pop'=>'1'
);
$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true );
curl_setopt($ch, CURLOPT_POST, true );
curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
curl_setopt($ch, CURLOPT_URL, "https://voip.ms/api/v1/rest.php");
$result = curl_exec($ch);
curl_close($ch);
$data=json_decode($result,true);
echo "<pre>";
print_r($data);
echo "</pre>";
?>
當我從終端中的命令列執行以下命令時,我能夠成功地從 VoIP.ms 發送 SMS 文本訊息:
curl -X POST -F '[email protected]' -F 'api_password=password' -F 'method=sendSMS' -F 'did=1234567890' -F 'dst=0987654321' -F 'message=Hello' https://voip.ms/api/v1/rest.php
通過在 Google 上搜索,我拼湊了以下 Google Apps 腳本:
function sendSMS() {
var formData = {
api_username : "[email protected]",
api_password : "password",
method : "sendSMS",
did : 1234567890,
dst : 0987654321,
message : "Hello"
};
var options = {
method : "POST",
payload : formData
};
UrlFetchApp.fetch("https://voip.ms/api/v1/rest.php", options);
}
當我運行腳本時,我收到以下錯誤:
例外:對https://voip.ms的請求失敗,回傳代碼 500。截斷的服務器回應:> xml version="1.0" encoding="UTF-8"?> <env:Envelope xmlns:env="http://www .w3.org/2003/05/soap-envelope">env:Bodyenv:Faultenv:Codeenv:Value... (使用 muteHttpExceptions 選項檢查完整回應) sendSMS @ Code.gs:14
關于我要去哪里錯的任何建議?
uj5u.com熱心網友回復:
我相信你的目標如下。
您想將以下 curl 命令轉換為 Google Apps 腳本。而且,您的 curl 命令作業正常。
curl -X POST -F '[email protected]' -F 'api_password=password' -F 'method=sendSMS' -F 'did=1234567890' -F 'dst=0987654321' -F 'message=Hello' https://voip.ms/api/v1/rest.php
修改點:
從您的示例 curl 命令中,似乎
did : 1234567890anddst : 0987654321應該是did : "1234567890"anddst : "0987654321"。大師的評論中已經提到了這一點。在您的 curl 命令中,
-F使用了。在這種情況下,請求頭的內容型別是multipart/form-data. 不幸的是,UrlFetchAppapplication/x-www-form-urlencoded用作默認內容型別。
當這些點反映在 Google Apps Script 中時,下面的修改如何?
修改后的腳本:
function sendSMS() {
var formData = {
api_username: "[email protected]",
api_password: "password",
method: "sendSMS",
did: "1234567890",
dst: "0987654321",
message: "Hello"
};
var options = { payload: Object.entries(formData).reduce((o, [k, v]) => (o[k] = Utilities.newBlob(v), o), {}) };
UrlFetchApp.fetch("https://voip.ms/api/v1/rest.php", options);
}
筆記:
這個修改后的腳本假設您的 URL
https://voip.ms/api/v1/rest.php可以從 Google 端訪問,并且您的值formData是有效值。請注意這一點。在 UrlFetchApp 中,請求正文
multipart/form-data是在內部服務器端自動創建的。但是,如果這個請求體不能用于你的API(有時這個請求體不能用),請使用FetchApp(作者:我)測驗請求。
參考:
- 獲取(網址,引數)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/527157.html
