问题描述

        最近将IOS书城容器化,切换流量后。正常的业务测试了一般,都没发现问题。线上的错误监控系统也没有报警,以为迁移工作又告一段落了,暗暗的松了一口气。紧接着,报警邮件来了,查看发现是一个苹果支付相关接口调用的curl错误,错误码为"56",错误描述为:“Failure with receiving network data”接收网络数据失败。

                     

机器 : 192.168.1.1
当前URL : /xxx/recharge/apple?xxxxxxxxxxxxx
接口URL : http://192.168.1.2:18000/third/apple/pay
错误信息 : Failure with receiving network data.
错误码 : 56
type : curl
时间 : 2016-09-19 22:09:37 +0800 从09-19 21:20:15到09-19 22:09:38共计错误:11

 

问题分析

   整体的业务流程:用户使用苹果支付,客户端拿到用户支付后用户返回的code,传给php,php 使用curl post提交给用户中心,用户中心拿到code后请去苹果支付的接口验证是否合法。

   怀疑方向:

            1、code有超过4000个字节长度,而curl post提交超过1024个字节后,会发送100-continue,将请求分为2步。

            2、书城服务器与接口服务器之间的网络问题

            3、libcurl的BUG(PHP这边的HTTP Clinet使用的libcurl库封装的)

            4、php7存在相关的bug

            5、docker当前版本存在bug

 

怀疑验证:

    1、 通过本地向用户中心支付接口发起请求,打印头信息,头信息确实返回了两次,第一次为"100-continue"。鸟哥在官网的文章中提过类似问题,在curl代码中增加设置项,将"Expect"设为空,然后测试,发现不会分步骤了,本地测试代码没有报错。然后提交上线。

1 curl_setopt($ch, CURLOPT_HTTPHEADER, array('Expect:'));
curl设置Expect

相关文章:

  • 2022-12-23
  • 2021-10-21
  • 2021-06-28
  • 2021-12-27
  • 2022-01-11
  • 2021-12-21
  • 2021-06-17
  • 2021-11-28
猜你喜欢
  • 2022-02-10
  • 2022-12-23
  • 2021-05-25
  • 2021-11-29
  • 2022-01-16
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案