簡體   English   中英

如何對 PHP 中的 Curl 進行故障排除?

[英]How do I troubleshoot Curl in PHP?

我從未使用過 Curl 但我正在嘗試在我的工作中完成一個自己的 api 項目只是為了獲得一些經驗。 我被困在第一步......我想用 api 進行身份驗證。 因此,我正在運行此代碼,並且希望看到帶有訪問令牌等的 Success 200 響應,但我什么也沒得到。 沒有錯誤,沒有反饋,頁面只是打開空白我已經厭倦了從這個頁面使用 CURLINFO_HEADER_OUT 你采取什么步驟來解決 PHP cURL 的問題? 但我仍然有一個空白頁
無論如何,感謝任何有優勢的人提供一些提示

<?php
const TOKEN_ENDPOINT  = 'xxxxxx';
const GRANT_TYPE      = 'xxxxx';
const CLIENTID        = 'xxxxxxxxxxx';
const CLIENTSECRET    = 'xxxxxxxxxxxxxx';
const USERNAME        = 'xxxxxxxxxxxxxxxxx';
const PASSWORD        = 'xxxxxxxxxxxxxxx';

$clientCredentials = base64_encode(CLIENTID . ':' . CLIENTSECRET);

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => TOKEN_ENDPOINT,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'grant_type=' . GRANT_TYPE . '&username=' . USERNAME . '&password=' . PASSWORD ,
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/x-www-form-urlencoded',
    'Accept: application/json',
    'Authorization: Basic ' . $clientCredentials
  ),
));


$response = curl_exec($curl);
curl_close($curl);
echo $response ;
?>

要檢查 curl 錯誤,最好的方法是使用curl_error function

$response = curl_exec($curl);
if (curl_errorno($curl)) {
    $error_msg = curl_error($curl);
}
curl_close($curl);
echo $response ;

在此處查看 libcurl 錯誤代碼的描述

請參閱 PHP curl_errno() function 這里的描述

在此處查看 PHP curl_error() function 的描述

當所有其他方法都失敗時,我會這樣做(來自我的 ApiHelper curl 包裝器的代碼片段)。 使用您自己的記錄器或證據打印機制。 大多數時候,謎題的答案都在印刷品中:

        // we simply stream curlopt debug info to a temporary 
        // file, so we can log it out later (when helper is set
        // to verbose)
        $st       = microtime(true);
        $verbiage = null;
        if ($this->verbose) {
            // write out the curl debug stuff
            curl_setopt($ch , CURLINFO_HEADER_OUT , false);
            curl_setopt($ch , CURLOPT_VERBOSE , true);
            $verbiage = fopen('php://temp' , 'w+');
            curl_setopt($ch , CURLOPT_STDERR , $verbiage);
        }

        $resp                = curl_exec($ch);
        $end                 = microtime(true);           // get as float
        $delta               = 1000.0 * ($end - $st);    // treat as float
        $this->roundTripInMs = sprintf("%.2f" , $delta);
        $this->getInstanceLogger()->debug("WS call : round trip took " . sprintf("%.2f" , $delta) . " ms.");
     
        if ($this->verbose) {
            // rewind and log the verbose output
            rewind($verbiage);
            $verboseLog = stream_get_contents($verbiage);
            $this->getInstanceLogger()->info("Verbose cURL : \n$verboseLog");
            fclose($verbiage);
        }
        $this->curlinfo = curl_getinfo($ch);
        $this->verbose && $this->getInstanceLogger()->info("cURL info : \n" . json_encode($this->curlinfo , PEHR_PRETTY_JSON));
        $this->httpStatus = curl_getinfo($ch , CURLINFO_RESPONSE_CODE);
        if (!$resp) {
            if ($this->verbose) $this->getInstanceLogger()->error("CURL request to [$url] failed\n" . json_encode($this->curlinfo , PEHR_PRETTY_JSON));
            return 0;
        }
        curl_close($ch);
        if ($resp && $this->verbose) $this->getInstanceLogger()->debug("Received json \n" . $resp);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM