PHP: curl HTTP/1.1 505 HTTP Version Not Supported 解决一例
*不早了,赶紧备忘结果赶紧睡觉
成因: 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不合法
好吧,返回的错误是另一回事了,那个另外解决。
