§ Базовый запрос
Официальная документация.Минимализм
$ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Вернуть тело страницы $content = curl_exec($ch); curl_close($ch);Среднемализм
$ch = curl_init($url); curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE); // Автоматически ставить referer curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); // Вернуть тело страницы curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); // Не проверять HTTPS curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); curl_setopt($ch, CURLOPT_HEADER, TRUE); // Включить заголовки в вывод curl_setopt($ch, CURLINFO_HEADER_OUT, TRUE); // Отслеживание строки запроса curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); // Переходить по локациям $content = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); $info_curl = curl_getinfo($ch); curl_close($ch);
§ Дополнительные параметры
Запрос POSTcurl_setopt($ch, CURLOPT_POST, TRUE); curl_setopt($ch, CURLOPT_POSTFIELDS, $data);Загрузка файла
curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, [ "file" => curl_file_create("myfilename.txt"), ]);Если
$data
это строка, то отсылка будет в виде строки, если array, то добавится заголовок Content: multipart/form-data и сформируется http_build_query строка.Запрос с заголовками в качестве параметра - массив с перечисленными заголовками.
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Set-Cookie: a=b", "User-Agent: MyAgent"]);Basic Auth
curl_setopt($ch, CURLOPT_HTTPHEADER, ["Authorization: Basic " . base64_encode("login:password")]);Использование прокси SOCKS5
curl_setopt($ch, CURLOPT_PROXY, "localhost"); curl_setopt($ch, CURLOPT_PROXYPORT, 9050); curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5_HOSTNAME); curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);Cтандартный прокси
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
§ Ограничение загрузки крупного файла
В этом примере загрузка идет не более 12345 байт, потом она обрывается.curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE); curl_setopt($ch, CURLOPT_NOPROGRESS, 0); curl_setopt($ch, CURLOPT_PROGRESSFUNCTION, function($res, $dltotal, $dlnow, $ultotal, $ulnow) { echo "$dltotal [$dlnow] $ultotal, $ulnow\n"; return $dlnow > 12345; });
§ Стандартные заголовки
curl_setopt($ch, CURLOPT_HTTPHEADER, [ "Accept: text/html,application/xhtml+xml,application/xml", "Accept-Encoding: gzip, deflate", "Accept-Language: en-US;q=0.8,en;q=0.7", "Cache-Control: max-age=0", "Connection: Close", "DNT: 1", "Upgrade-Insecure-Requests: 1", "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", ]);
§ Мультизапрос
В $channel подается инициализированный $ch = curl_init() в качестве значения.public function multi_curl($channel) { $active = 0; // Запуск мультиобработчика $mh = curl_multi_init(); // Добавление foreach ($channel as $query_id => $ch) curl_multi_add_handle($mh, $ch); // Ожидание исполнения do { $perform = curl_multi_exec($mh, $active); } while ($perform == CURLM_CALL_MULTI_PERFORM); // Исполнение запросов while ($active && $perform == CURLM_OK) { if (curl_multi_select($mh) == -1) continue; do { $perform = curl_multi_exec($mh, $active); } while ($perform == CURLM_CALL_MULTI_PERFORM); } // Закрываем все дескрипторы foreach ($channel as $query_id => $ch) { $channel[$query_id] = ['body' => curl_multi_getcontent($ch), 'ch' => $ch]; curl_multi_remove_handle($mh, $ch); } curl_multi_close($mh); return $channel; }
§ Загрузка в файл
$fp = fopen("filename.txt", "wb+"); // curl init code curl_setopt($ch, CURLOPT_FILE, $fp); curl_exec($ch); fclose($fp);
§ Отсылка файла
$curl = curl_init(); curl_setopt($curl, CURLOPT_PUT, 1 ); curl_setopt($curl, CURLOPT_INFILESIZE, filesize($tmpFile) ); curl_setopt($curl, CURLOPT_INFILE, ($in=fopen($tmpFile, 'r')) ); curl_setopt($curl, CURLOPT_CUSTOMREQUEST, 'POST' ); curl_setopt($curl, CURLOPT_HTTPHEADER, [ 'Content-Type: application/json' ] ); curl_setopt($curl, CURLOPT_URL, $url ); curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1 ); $result = curl_exec($curl); curl_close($curl); fclose($in);