调用外部API时,如何查看请求参数的实际发送情况?
嘿,我看你已经在外部API的transfer方法里加了print_r($attributes); exit;,这其实已经是个很直接的调试办法了!不过还有几个更全面的方式,能帮你彻底看清实际发送的请求细节,我给你梳理下:
直接利用你已加的代码输出参数结构
你在transfer方法里打印的$attributes,就是你调用transfers()时传入的原始参数数组。不过这里注意下:你调用的方法是transfers()(复数),但API里定义的是transfer()(单数),先确认下是不是方法名的笔误或者SDK里的封装映射~
执行代码后,页面会输出类似这样的结构:Array ( [transfers] => Array ( [0] => Array ( [account] => 123456 // 这里会显示你的实际account_id值 ) ) )这就是你传给API的参数原始形态。
查看最终转成HTTP请求的内容
如果想知道参数最终被转换成什么格式(比如JSON、表单数据)发送给API,可以在request方法调用前加代码输出转换后的内容。假设SDK会把数组转成JSON,你可以这么改:public function transfer($attributes = array()) { $relativeUrl = $this->getEntityUrl() . $this->id . '/transfers'; // 新增:输出转换后的请求体 $requestBody = json_encode($attributes); echo "实际发送的HTTP请求体:\n" . $requestBody; exit; return $this->request('POST', $relativeUrl, $attributes); }执行后就能看到API真正收到的参数格式,比如:
{"transfers":[{"account":"123456"}]}在调用API前先检查参数
如果你不想修改API源码,可以在调用transfers()之前,先打印自己构造的参数,确认它的结构和值是否正确:// 先把参数单独拎出来 $transferParams = array('transfers' => [ ['account' => $dbres[0]['account_id']]]); // 打印参数 print_r($transferParams); exit; // 再调用API $transfer = $apiTransfer->payment->fetch($respObj->id)->transfers($transferParams);这样能先排除自己构造参数时的问题,再和API方法里的输出做对比。
开启SDK的日志功能(如果支持)
很多第三方API SDK都会自带日志配置,你可以查下这个API的文档,看看有没有开启HTTP请求日志的选项。开启后,SDK会把完整的请求信息(包括请求URL、请求头、请求体、响应内容)都记录下来,这是最全面的调试方式,不用改任何源码。
内容的提问来源于stack exchange,提问作者Dwigh




