好吧,我在向不和谐API发出请求时遇到问题,我不明白curl是如何工作的。这是我的代码:function make_request($mixed, $token, $get_json = true) { $url = is_string($mixed) ? $mixed : getApiUrl($mixed); // TODO: Check for valid url! $log_file = __DIR__.'/../logs/request.txt'; if(!is_readable($log_file)) printError("File '$log_file' is not readable!"); if(!is_writable($log_file)) printError("File '$log_file' is not writable!"); $ch = curl_init(); $f = fopen($log_file, 'w+'); if($f === false) printError("There was an error opening '$log_file'!"); ftruncate($f, 0); curl_setopt_array($ch, array( CURLOPT_URL => $url, CURLOPT_HTTPHEADER => array('Authorization: Bot ' . $token), CURLOPT_RETURNTRANSFER => 1, CURLOPT_FOLLOWLOCATION => 1, CURLOPT_VERBOSE => 1, CURLOPT_SSL_VERIFYPEER => 0, CURLOPT_STDERR => $f, )); $response = curl_exec($ch); fclose($f); curl_close($ch); $contents = file_get_contents($log_file); if($contents != '') { // Censor bot key! $contents = preg_replace("/^Authorization: Bot.+?$/", "Authorization: Bot xxx", $contents); printError($contents); } if($get_json) { $pretty = isset($_GET["pretty"]); if($pretty) { $json = json_decode($response); return json_encode($json, JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES); } return $response; } return json_decode($response, true);}我的问题是,当 curl 只显示冗长的日志时,也许我正在打印错误,但我不确定是用于打印错误还是整个日志。CURLOPT_STDERR在文档上:https://www.php.net/manual/en/function.curl-setopt.php将错误输出到的替代位置,而不是 STDERR。也许是因为启用了。CURLOPT_VERBOSETRUE 表示输出详细信息。将输出写入 STDERR 或使用 CURLOPT_STDERR指定的文件。在这种情况下,我需要知道何时发生错误。这里有任何提示吗?
1 回答
茅侃侃
TA贡献1842条经验 获得超21个赞
您走在正确的轨道上。如果需要诊断输出,则必须在发出请求之前安排捕获它。通常的方法是将其存储在RAM中,检查卷曲错误并进行适当的处理。
该代码如下所示:
$ch = curl_init();
curl_setopt_array($ch, [
// ... other options here
CURLOPT_RETURNTRANSFER => 1,
CURLOPT_VERBOSE => 1,
CURLOPT_STDERR => ($log = fopen('php://temp', 'w')),
]);
$response = curl_exec($ch);
if (false === $response) {
$errno = curl_error($ch);
$errmsg = curl_strerror($errno);
$logtext = stream_get_contents($log, -1, 0);
// ... log the info above, take action, etc.
} else {
// ... $response is your HTTP response
}
curl_close($ch);
- 1 回答
- 0 关注
- 69 浏览
添加回答
举报
0/150
提交
取消