DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: tkzcol
今日帖子: 3
在线用户: 1
导航: 论坛 -> DELPHI技术 斑竹:liumazi,sephil  
作者:
男 dlfsystem (dlfsystem) ★☆☆☆☆ -
盒子活跃会员
2021/3/5 18:13:40
标题:
内网发短信的问题。 浏览:1039
加入我的收藏
楼主: 请教各位老师,看看问题出在那里。谢谢!
问题:无法发出短信,错误提示: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;
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
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/
作者:
男 pcplayer (pcplayer) ★☆☆☆☆ -
普通会员
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
----------------------------------------------
-
作者:
男 dlfsystem (dlfsystem) ★☆☆☆☆ -
盒子活跃会员
2021/3/5 20:36:24
3楼: 谢谢二位。
----------------------------------------------
-
作者:
男 luckyso999 (luckyso) ★☆☆☆☆ -
盒子活跃会员
2021/3/8 10:49:01
4楼: 有时候可以换个http控件解决还快些
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行69.82422毫秒 RSS