平時在做 request 都是用別人刻好的 library ,Python 用 requests,而 PHP 就用 Guzzle 之類的。但…畢竟開始工作了,想說幫專案減少一點相依性,原生的功能做得到就盡量少用別人的。

結果就出事了。以後還是直接用 Guzzle 好了

所以寫篇文章來紀錄一下…

一般來說,使用 cURL 會這樣子呼叫

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com");
curl_setopt($ch, CURLOPT_HEADER, false);
$response = curl_exec($ch);
curl_close($ch);

這樣會有一個問題,就是如果成功了,他會默默幫你輸出一個字串 ok,然後你的 API 回應就會變成

ok{
    "data": {
        "key": "value"
    }
}

這樣很尷尬,會導致 client 端 parse 錯誤,然後服務就爆了。那要如何不印出 ok 這個字樣呢?

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,"http://www.example.com");
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);

其實只需要多加一行就可以了,但這也是 cURL 的缺點,需要設定的參數太多了。不過事情就是這樣,有利有弊,端看自己如何選擇。雖然麻煩一點,但可以減少專案的相依性,感覺還是挺不錯的!

P.S. 參數太多是怎樣一個多法呢?可以參考:http://php.net/manual/en/function.curl-setopt.php