PHP cURL Note
平時在做 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