美文网首页
curl相关问题

curl相关问题

作者: 小小布谷鸟 | 来源:发表于2017-10-30 20:39 被阅读0次

    问题描述:

    代码中请求一个接口(http://credit.ziroom.com/api/userInfoApiController/getUserBaseInfo?uid=b6e7ac3c-37bd-4f8b-8994-1158d68fafc5),总是超时,但是单独拿出来,请求又很快,同届接口的返回时间也很快,远未达到超时的地步,很困惑

    定位问题:

    在服务器上直接curl 接口,发现偶尔比较慢,于是写了个测试脚本,统计请求接口的相关信息:

    $ch = curl_init('http://credit.ziroom.com/api/userInfoApiController/getUserBaseInfo?uid=b6e7ac3c-37bd-4f8b-8994-1158d68fafc5');

    curl_exec($ch);

    $info = curl_getinfo($ch);

    print_r($info);

    print_r(curl_error($ch));

    请求多次,发现连接时间比较长

    发现两台机器连接时间太长,运维定位网络问题

    扩展:

    有的代码中访问https的域名报错,但是在服务器上手动curl调用是成功的

    原因:服务器系统安装的curl和php编译的curl不一致,导致两种调用返回的结果不同

    查看php的curl,看到没有支持https扩展

    curl_version函数查看,如图:

    /usr/local/php/bin/php -i | grep curl 查看编译的参数

    查看系统的curl支持https扩展

    curl --version

    知识扩展:

    一、 一个域名可以解析到多个ip上,客户端连接时会使用到其中一个IP。

    使用nslookup命令查看域名对应的ip

    二、 一次TCP请求主要有以下流程:

    DNS解析

    TCP建连

    发送数据

    服务器响应

    接收数据

    每个阶段,都可能超时,所以引起请求失败的原因是多样的,具有一定的复杂性:

    1. 如果使用域名请求,目标机器是不确定的。

    2. 请求的每个阶段,都有可能超时或出错。

    3. 对同一个服务器,从不同的来源访问,数据传输的网络线路可能并不一样,导致比较难以复现

    相关文章

      网友评论

          本文标题:curl相关问题

          本文链接:https://www.haomeiwen.com/subject/bwympxtx.html