关于Post时CURL奇怪的问题,无响应。

紫色田园 2019-10-24 07:20:51
问题很奇怪,被请求端能收到请求过来的参数。也返回了一个Json数据。可是很奇怪,发送请求却收不到这个Json.
代码如下:
    
public function sendHttpData($url='',$params=[],$method = 'POST', $options = [])
{

$method = strtoupper($method);
$protocol = substr($url, 0, 5);
$query_string = is_array($params) ? http_build_query($params) : $params;

$ch = curl_init();
$defaults = [];
if ('GET' == $method)
{
$geturl = $query_string ? $url . (stripos($url, "?") !== FALSE ? "&" : "?") . $query_string : $url;
$defaults[CURLOPT_URL] = $geturl;
}
else
{
$defaults[CURLOPT_URL] = $url;
if ($method == 'POST')
{
$defaults[CURLOPT_POST] = 1;
}
else
{
$defaults[CURLOPT_CUSTOMREQUEST] = $method;
}
$defaults[CURLOPT_POSTFIELDS] = $query_string;
}

$defaults[CURLOPT_HEADER] = TRUE;
$defaults[CURLOPT_USERAGENT] = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.98 Safari/537.36";
$defaults[CURLOPT_FOLLOWLOCATION] = TRUE;
$defaults[CURLOPT_RETURNTRANSFER] = TRUE;
$defaults[CURLOPT_CONNECTTIMEOUT] = 3;
$defaults[CURLOPT_TIMEOUT] = 3;

curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));

if ('https' == $protocol)
{
$defaults[CURLOPT_SSL_VERIFYPEER] = FALSE;
$defaults[CURLOPT_SSL_VERIFYHOST] = FALSE;
$defaults[CURLOPT_SSLVERSION] = 3;
}

curl_setopt_array($ch, (array) $options + $defaults);

$ret = curl_exec($ch);
$err = curl_error($ch);

if (FALSE === $ret || !empty($err))
{
$errno = curl_errno($ch);
$info = curl_getinfo($ch);
curl_close($ch);
return [
'ret' => FALSE,
'errno' => $errno,
'msg' => $err,
'info' => $info,
];

return ['status'=>FALSE,'message'=>$err,'errno'=>$errno,'info'=>$info];
}

list($header,$body) = explode("\r\n\r\n", $ret, 2);

curl_close($ch);

$data = json_decode($body,true);

return $data;
}


====================================
被请求端返回了一个Json,代码如下:

echo json_encode(array('code' => 1002, 'message' => 'Incorrect user name or password','data'=>[]));
die();

========================================

发送端一直得不到响应的Json数据,$ret =false,$err为非空。
按F12查看Response里面,
[errno] => 28
[msg] => Operation timed out after 3000 milliseconds with 0 bytes received
就是超时。查了好久都没查到原因,请各位高手指点一下。先谢过了!
对了,发送端和响应端都是用的Thinkphp5
...全文
623 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
于小九 2019-10-27
  • 打赏
  • 举报
回复
这个错误是请求端发出的吗?请求端是否使用ajax提交?是的话尝试一下加大请求timeout的超时时间。还有被请求端也手动模拟一下请求信息看看是不是被请求端的服务器出现此类超时响应
紫色田园 2019-10-24
  • 打赏
  • 举报
回复
哪怕
$defaults[CURLOPT_CONNECTTIMEOUT] = 30;
$defaults[CURLOPT_TIMEOUT] = 30;
我改成30秒,还是一样的超时,没数据返回。

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧