|
|
导航: |
论坛 -> DELPHI技术
斑竹:liumazi,sephil |
|
作者: |
|
2021/3/5 18:13:40 |
标题: |
|
加入我的收藏 |
楼主: |
请教各位老师,看看问题出在那里。谢谢! 问题:无法发出短信,错误提示:Http/1.1 500 Internal Server Error. { 1.接口地址http://65.95.241.111/api/sms.asmx/Send 2.请求编码UTF-8 3.请求方式 统一用post请求,请求头应设置Content-Type如下: Content-Type: application/x-www-form-urlencoded 4.请求参数 data=string 其中的string替换为实际值,值为json格式数据,具体格式参照下面示例。请严格按照示例构造json。 { "serialNo": "1111111111", //系统生成的序列号 "data": [ { "mobile": "1892222222", "content": "test1" }, { "mobile": "18911111111", "content": "test2" } ] }
节点说明: 1、serialNo:申请接口时,系统生成的序列号 2、data:json数组,封装待发送的手机号码和信息,支持批量发送,一次最多50条。 data数组节点说明: mobile:待发送手机号码 content:发送内容 }
procedure TForm1.btnSendClick(Sender: TObject); var url:string; strjson:string; idHTTP1 : TIdHttp; jsonToSend : TStringStream; aResult:string;
begin strjson := 'data=' +'{' +' "serialNo":"4C6EA7DCFEFB33D7A20D4716EDAC4621xxxxxxxxxx",' +' "data":[' +' {' +' "mobile" : "13322221111",' +' "content" : "Test1" },' +' {' +' "mobile" : "1372221111",' +' "content" : "测试" }]}';
url := 'http://xx.xx.xx.xx/api/sms.asmx/send'; //短信发送接口地址。
idHTTP1 := TIdHttp.Create(nil); IdHTTP1.HandleRedirects := True; IdHTTP1.ReadTimeout := 5000;
IdHTTP1.Request.ContentType := 'application/x-www-form-urlencoded'; //IdHTTP1.Request.ContentLength := Length(IdHTTP1.Request.ContentType);
//jsonToSend := TStringStream.Create(strjson); jsonToSend := TStringStream.Create(strjson, TEncoding.UTF8);
//JsonToSend.SaveToFile('d:\SMs\json.txt'); jsonToSend.Position := 0;//将流位置置为0
aResult := IdHTTP1.Post(url, jsonToSend); aResult := UnicodeToChinese(aResult);
Memo1.Lines.Text := aResult;
jsonToSend.free; IdHTTP1.free;
end;
----------------------------------------------
- |
作者: |
|
2021/3/5 18:44:02 |
1楼: |
HTTP1.Request.CharSet := 'utf-8'; https://stackoverflow.com/questions/24025646/delphi-http-post-json
----------------------------------------------
[alias] co = clone --recurse-submodules up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
|
作者: |
|
2021/3/5 19:52:12 |
2楼: |
如果你明确知道各个段的字符串应该是什么,而且它对 HTTP 头有明确特殊要求,
那么,你完全可以自己拼字符串,来实现一个 HTTP POST,然后通过和服务器建立 TCP 连接,然后发字符串的方式,来试试。
我研究一个特定的 HTTP 服务的时候,通常就会这样做。这样做的好处是你明确知道发了一些什么,对方会有什么反应。
如果用 IdHTTP 控件,你也需要自己构造对方需要的 HTTP 头。那还不如自己构造然后用 TCP 发送。
包括字符串编码,比如是 UTF8,那是不是你的编码有问题?等等。
之前,我测试微软的 Azure 服务,就是采用这样的办法。为此我写了研究过程的博客:
https://blog.csdn.net/pcplayer/article/details/86763311
----------------------------------------------
-
|
作者: |
|
2021/3/5 20:36:24 |
3楼: |
谢谢二位。
----------------------------------------------
-
|
作者: |
|
2021/3/8 10:49:01 |
4楼: |
有时候可以换个http控件解决还快些
----------------------------------------------
-
|
|