§ Базовый запрос
Официальная документация.Минимализм
1$ch = curl_init($url); 2curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Вернуть тело страницы 3$content = curl_exec($ch); 4curl_close($ch);Среднемализм
1$ch = curl_init($url); 2 3curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); // Автоматически ставить referer 4curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Вернуть тело страницы 5curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Не проверять HTTPS 6curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); 7curl_setopt($ch, CURLOPT_HEADER, TRUE); // Включить заголовки в вывод 8curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); // Отслеживание строки запроса 9curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Переходить по локациям 10 11$content = curl_exec($ch); 12$http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); 13$info_curl = curl_getinfo($ch); 14 15curl_close($ch);
§ Дополнительные параметры
Запрос POST1curl_setopt($ch, CURLOPT_POST, TRUE); 2curl_setopt($ch, CURLOPT_POSTFIELDS, $data);Загрузка файла
1curl_setopt($ch, CURLOPT_POST, true); 2curl_setopt($ch, CURLOPT_POSTFIELDS, [ 3 "file" => curl_file_create("myfilename.txt"), 4]);Если
$data
это строка, то отсылка будет в виде строки, если array, то добавится заголовок Content: multipart/form-data и сформируется http_build_query строка.Запрос с заголовками в качестве параметра - массив с перечисленными заголовками.
1curl_setopt($ch, CURLOPT_HTTPHEADER, ["Set-Cookie: a=b", "User-Agent: MyAgent"]);Basic Auth
1curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Basic " . base64_encode("login:password")]);Использование прокси SOCKS5
1curl_setopt($ch, CURLOPT_PROXY, "localhost"); 2curl_setopt($ch, CURLOPT_PROXYPORT, 9050); 3curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME); 4curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);Cтандартный прокси
1curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
§ Ограничение загрузки крупного файла
В этом примере загрузка идет не более 12345 байт, потом она обрывается.1curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); 2curl_setopt($ch, CURLOPT_NOPROGRESS, 0); 3curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function($res, $dltotal, $dlnow, $ultotal, $ulnow) { 4 5 echo "$dltotal [$dlnow] $ultotal, $ulnow\n"; 6 return $dlnow > 12345; 7});
§ Стандартные заголовки
1curl_setopt($ch, CURLOPT_HTTPHEADER, [ 2 "Accept: text/html,application/xhtml+xml,application/xml", 3 "Accept-Encoding: gzip, deflate", 4 "Accept-Language: en-US;q=0.8,en;q=0.7", 5 "Cache-Control: max-age=0", 6 "Connection: Close", 7 "DNT: 1", 8 "Upgrade-Insecure-Requests: 1", 9 "User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36", 10]);
§ Мультизапрос
В $channel подается инициализированный $ch = curl_init() в качестве значения.1public function multi_curl($channel) { 2 3 $active = 0; 4 5 // Запуск мультиобработчика 6 $mh = curl_multi_init(); 7 8 // Добавление 9 foreach ($channel as $query_id => $ch) curl_multi_add_handle($mh, $ch); 10 11 // Ожидание исполнения 12 do { $perform = curl_multi_exec($mh, $active); } 13 while ($perform == CURLM_CALL_MULTI_PERFORM); 14 15 // Исполнение запросов 16 while ($active && $perform == CURLM_OK) { 17 18 if (curl_multi_select($mh) == -1) 19 continue; 20 21 do { $perform = curl_multi_exec($mh, $active); } 22 while ($perform == CURLM_CALL_MULTI_PERFORM); 23 } 24 25 // Закрываем все дескрипторы 26 foreach ($channel as $query_id => $ch) { 27 28 $channel[$query_id] = ['body' => curl_multi_getcontent($ch), 'ch' => $ch]; 29 curl_multi_remove_handle($mh, $ch); 30 } 31 32 curl_multi_close($mh); 33 return $channel; 34}
§ Загрузка в файл
1$fp = fopen("filename.txt", "wb+"); 2// curl init code 3curl_setopt($ch, CURLOPT_FILE, $fp); 4curl_exec($ch); 5fclose($fp);
§ Отсылка файла
1$curl = curl_init(); 2curl_setopt($curl, CURLOPT_PUT, 1 ); 3curl_setopt($curl, CURLOPT_INFILESIZE, filesize($tmpFile) ); 4curl_setopt($curl, CURLOPT_INFILE, ($in=fopen($tmpFile, 'r')) ); 5curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST' ); 6curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ] ); 7curl_setopt($curl, CURLOPT_URL, $url ); 8curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 ); 9$result = curl_exec($curl); 10curl_close($curl); 11fclose($in);