*不早了,赶紧备忘结果赶紧睡觉
成因: GET请求参数中包含空格,造成 HTTP 1.1协议解析认为结构错误
解决办法: 对请求的内容执行 urlencode 或手动替换空格' '为%20

请求的是联通的短信下发API,有很多不寻常的要求,例如编码要求是 GB2312的。返回格式是要自己解析的参数字串而不是常见的xml/json

PHP代码片段:

$phone="{马赛克}";
$sms = "【XXXX】验证码 9964,10分钟内有效";

$spCode = "{马赛克}";
$loginName = "{马赛克}";
$passwd = "{马赛克}";        
$msg = iconv("UTF-8", "GBK//IGNORE", $sms); //短信文本转换为 GBK

$api = "http://gd.ums86.com:8899/sms/Api/Send.do?SpCode=".$spCode."&LoginName=".$loginName."&Password=".$passwd."&MessageContent=".$msg."&UserNumber=".$phone."&SerialNumber=&ScheduleTime=&f=1";

$rs = $b->curlGET($api); //一个自写curl的方法,细节略

调试时一直返回空值,一度以为curl的参数配置有问题..

直到查看返回的header才看见505的报错,

HTTP/1.1 505 HTTP Version Not Supported
Server: Flaginfo_Web
Date: Sun, 26 May 2019 19:02:17 GMT
Transfer-Encoding: chunked
Connection: keep-alive

查到国外的这个issues的解答

https://www.stechies.com/505-http-version-not-supported/

再自己试了一下..解决

$api = "http://gd.ums86.com:8899/sms/Api/Send.do?SpCode=".$spCode."&LoginName=".$loginName."&Password=".$passwd."&MessageContent=".urlencode($msg)."&UserNumber=".$phone."&SerialNumber=&ScheduleTime=&f=1";

HTTP/1.1 200 OK 
Server: Flaginfo_Web 
Date: Sun, 26 May 2019 19:05:41 GMT 
Content-Length: 29 
Connection: keep-alive 

result=5&description=IP不合法

好吧,返回的错误是另一回事了,那个另外解决。

标签: php, curl, 505

添加新评论