从 Delphi 通过 API 发送短信
Sending SMS through API from Delphi
我想使用在线 API 从 Delphi 发送短信。
API 由服务提供商提供,可通过网络浏览器使用,如下所示:
http://sendpk.com/api/sms.php?username=xxxx&password=xxxx&sender=Masking&mobile=xxxx&message=Hello
以上url在浏览器打开时正常,短信发送成功。现在,我正在努力将 API 集成到我的 Delphi 应用程序中。
通过网上搜索,我找到了一些例子,最后我尝试了下面的代码:
var
lHTTP: TIdHTTP;
lParamList: TStringList;
begin
lParamList := TStringList.Create;
lParamList.Add('username=xxxx');
lParamList.Add('password=xxxx');
lParamList.Add('sender=Masking');
lParamList.Add('mobile=xxxx');
lParamList.Add('message=Hello');
lHTTP := TIdHTTP.Create;
try
PostResult.Lines.Text := lHTTP.Post('http://sendpk.com/api/sms.php', lParamList);
finally
lHTTP.Free;
lParamList.Free;
end;
但是我得到一个错误:
HTTP/1.1 406 Not Acceptable
服务提供商网站上提供的 API 参考资料如下:
请指导我。我做错了什么,正确的代码是什么?
编辑
API参考中提供的C#代码如下:
using System;
using System.Net;
using System.Web;
public class Program
{
public static void Main()
{
string MyUsername = "userxxx"; //Your Username At Sendpk.com
string MyPassword = "xxxx"; //Your Password At Sendpk.com
string toNumber = "92xxxxxxxx"; //Recepient cell phone number with country code
string Masking = "SMS Alert"; //Your Company Brand Name
string MessageText = "SMS Sent using .Net";
string jsonResponse = SendSMS(Masking, toNumber, MessageText, MyUsername, MyPassword);
Console.Write(jsonResponse);
//Console.Read(); //to keep console window open if trying in visual studio
}
public static string SendSMS(string Masking, string toNumber, string MessageText, string MyUsername , string MyPassword)
{
String URI = "http://sendpk.com" +
"/api/sms.php?" +
"username=" + MyUsername +
"&password=" + MyPassword +
"&sender=" + Masking +
"&mobile=" + toNumber +
"&message=" + Uri.UnescapeDataString(MessageText); // Visual Studio 10-15
try
{
WebRequest req = WebRequest.Create(URI);
WebResponse resp = req.GetResponse();
var sr = new System.IO.StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}
catch (WebException ex)
{
var httpWebResponse = ex.Response as HttpWebResponse;
if (httpWebResponse != null)
{
switch (httpWebResponse.StatusCode)
{
case HttpStatusCode.NotFound:
return "404:URL not found :" + URI;
break;
case HttpStatusCode.BadRequest:
return "400:Bad Request";
break;
default:
return httpWebResponse.StatusCode.ToString();
}
}
}
return null;
}
}
您需要使用 TIdHTTP.Get()
而不是 TIdHTTP.Post()
:
var
lHTTP: TIdHTTP;
lUser, lPass, lSender, lMobile, lMsg: string;
begin
lUser := 'xxxx';
lPass := 'xxxx';
lSender := 'Masking';
lMobile := 'xxxx';
lMsg := 'Hello';
lHTTP := TIdHTTP.Create;
try
PostResult.Lines.Text := lHTTP.Get('http://sendpk.com/api/sms.php?username=' + TIdURI.ParamsEncode(lUser) + '&password=' + TIdURI.ParamsEncode(lPass) + '&sender=' + TIdURI.ParamsEncode(lSender) + '&mobile=' + TIdURI.ParamsEncode(lMobile) + '&message=' + TIdURI.ParamsEncode(lMsg));
finally
lHTTP.Free;
end;
end;
更新: 406
响应代码意味着服务器无法 return 以客户端可接受的格式响应客户的 Accept...
请求 header(s)(Accept
、Accept-Language
、Accept-Encoding
等),因此请检查您的 headers 与 API 期待和浏览器发送的内容。
我想使用在线 API 从 Delphi 发送短信。
API 由服务提供商提供,可通过网络浏览器使用,如下所示:
http://sendpk.com/api/sms.php?username=xxxx&password=xxxx&sender=Masking&mobile=xxxx&message=Hello
以上url在浏览器打开时正常,短信发送成功。现在,我正在努力将 API 集成到我的 Delphi 应用程序中。
通过网上搜索,我找到了一些例子,最后我尝试了下面的代码:
var
lHTTP: TIdHTTP;
lParamList: TStringList;
begin
lParamList := TStringList.Create;
lParamList.Add('username=xxxx');
lParamList.Add('password=xxxx');
lParamList.Add('sender=Masking');
lParamList.Add('mobile=xxxx');
lParamList.Add('message=Hello');
lHTTP := TIdHTTP.Create;
try
PostResult.Lines.Text := lHTTP.Post('http://sendpk.com/api/sms.php', lParamList);
finally
lHTTP.Free;
lParamList.Free;
end;
但是我得到一个错误:
HTTP/1.1 406 Not Acceptable
服务提供商网站上提供的 API 参考资料如下:
请指导我。我做错了什么,正确的代码是什么?
编辑
API参考中提供的C#代码如下:
using System;
using System.Net;
using System.Web;
public class Program
{
public static void Main()
{
string MyUsername = "userxxx"; //Your Username At Sendpk.com
string MyPassword = "xxxx"; //Your Password At Sendpk.com
string toNumber = "92xxxxxxxx"; //Recepient cell phone number with country code
string Masking = "SMS Alert"; //Your Company Brand Name
string MessageText = "SMS Sent using .Net";
string jsonResponse = SendSMS(Masking, toNumber, MessageText, MyUsername, MyPassword);
Console.Write(jsonResponse);
//Console.Read(); //to keep console window open if trying in visual studio
}
public static string SendSMS(string Masking, string toNumber, string MessageText, string MyUsername , string MyPassword)
{
String URI = "http://sendpk.com" +
"/api/sms.php?" +
"username=" + MyUsername +
"&password=" + MyPassword +
"&sender=" + Masking +
"&mobile=" + toNumber +
"&message=" + Uri.UnescapeDataString(MessageText); // Visual Studio 10-15
try
{
WebRequest req = WebRequest.Create(URI);
WebResponse resp = req.GetResponse();
var sr = new System.IO.StreamReader(resp.GetResponseStream());
return sr.ReadToEnd().Trim();
}
catch (WebException ex)
{
var httpWebResponse = ex.Response as HttpWebResponse;
if (httpWebResponse != null)
{
switch (httpWebResponse.StatusCode)
{
case HttpStatusCode.NotFound:
return "404:URL not found :" + URI;
break;
case HttpStatusCode.BadRequest:
return "400:Bad Request";
break;
default:
return httpWebResponse.StatusCode.ToString();
}
}
}
return null;
}
}
您需要使用 TIdHTTP.Get()
而不是 TIdHTTP.Post()
:
var
lHTTP: TIdHTTP;
lUser, lPass, lSender, lMobile, lMsg: string;
begin
lUser := 'xxxx';
lPass := 'xxxx';
lSender := 'Masking';
lMobile := 'xxxx';
lMsg := 'Hello';
lHTTP := TIdHTTP.Create;
try
PostResult.Lines.Text := lHTTP.Get('http://sendpk.com/api/sms.php?username=' + TIdURI.ParamsEncode(lUser) + '&password=' + TIdURI.ParamsEncode(lPass) + '&sender=' + TIdURI.ParamsEncode(lSender) + '&mobile=' + TIdURI.ParamsEncode(lMobile) + '&message=' + TIdURI.ParamsEncode(lMsg));
finally
lHTTP.Free;
end;
end;
更新: 406
响应代码意味着服务器无法 return 以客户端可接受的格式响应客户的 Accept...
请求 header(s)(Accept
、Accept-Language
、Accept-Encoding
等),因此请检查您的 headers 与 API 期待和浏览器发送的内容。