Fetch url directly
The following program fetches the contents of a URL directly, without using any proxy.
Get запросы curl в php
Или можно использовать аналог через функцию file_get_contents():
Oauth авторизация
Если на сайте реализована работа с OAuth протоколом авторизации, который позволяетвыдать права на действия, которые сам сайт сможет производить на другом ресурсе отлица, авторизовавшегося и давшего это разрешение, пользователя, тогда запрос cURL в php будет выглядеть следующим образом:
Post запросы curl в php
Функция file_get_contents() так же умеет отправлять POST запросы. Для этого нужно использовать заголовки:
Use socks proxy with curl
This code example demonstrates how to use a socks proxy with curl in php
Запрос через proxy
Когда нужно сделать запрос, подменив при этом источник запроса на промежуточный адрес, то используйте опцию PROXY:
Какую задачу должен решать скрипт
Скрипт должен обращаться к сервису с курсами валют через прокси-сервер, получать ответ в формате JSON, декодировать его и выводить на экран курс доллара к рублю на сегодняшний день.
Методом ftp
Не смотря на то, что в PHP есть библиотека для работы с FTP, все же cURL также позволяет работать по этому протоколу напрямую.
Методом post
Таким образом можно отправить один или несколько файлов сразу:
Методом put
Мульти запросы curl в php
Обычно в скрипте PHP выполнение запросов cUrl производится последовательно, то есть друг за другом. Пока не вернется результат предыдущего запроса, новый не выполнится.
Одной из самых важных особенностью cURL в PHP является возможность осуществлять несколько асинхронных запросов одновременно.
Например, если нужно собрать независимые друг от друга данные с разных сайтов, то можно организовать их параллельный сбор. Можно также произвести несвязанные вычисления или обработку данных через асинхронные запросы к скриптам в отдельных файлах.
Эта особенность позволяет оптимизировать работу скрипта и сократить время его выполнения.
Функция curl_multi_exec() многократно вызывается в цикле с постусловием, где параметр $running имеет значение количества активных соединений.
Чем больше обработчиков в параллельной работе, тем больше сокращается время выполнения скрипта, поэтому нелишним будет внедрить привычку использовать эту возможность cURL в своих скриптах.
Нужны ли для curl php какие-то особые прокси?
в зависимости от типа прокси – различные параметры.
HTTP прокси:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
HTTPS прокси:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTPS);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
SOCKS4 прокси:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS4);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
SOCKS5 прокси без авторизации:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
SOCKS5 прокси с авторизацией по логину и паролю:
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_SOCKS5);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip);
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $proxy_pass);
Насчёт https прокси с авторизацией по логину/паролю, socks4a прокси – ничего не скажу, не сталкивался с ними.
Кроме того, у вас могут быть прокси с авторизацией по ip. Тогда просто узнать внешний ip сервера и установить эту привязку в настройках в магазине, где приобрели прокси.
P.S. Если тип прокси достоверно не известен (публичные прокси из неясных источников) – то последовательно делать запрос и смотреть ответ. При работе с публичными списками прокси делаю именно так. Заодно можно отсекать прокси с неприемлемым временем ответа. В копилку – определение типа прокси средствами php/curl
Отправить и получить cookie
Для сохранения куки в файле необходимо указать путь к этому файлу в соответствующих параметрах CURLOPT_COOKIEFILE и CURLOPT_COOKIEJAR.
Параметр CURLOPT_COOKIE используется для принудительной передачи значения куки:
Отправка curl запроса php
Формирование cURL запроса состоит из четырех этапов:
- Инициализация
- Указание параметров
- Выполнение команды и получение результата
- Освобождение памяти
Итак, как это должно выглядеть в коде:
Этапы 1,3 и 4 типовые для всех типов запросов. А на этапе 2, в зависимости от указанных параметров, как раз и формируется тот или иной тип запроса.
Отправка файлов на другой сервер используя curl
Есть несколько вариантов передачи файлов между серверами.
Получение информации о запросе curl
Чтобы получить исчерпывающую информацию о самом запросе используется функция curl_getinfo(). Главным образом эта информация полезна для отладки работы скрипта, в котором выполняются cURL запросы.
Функция возвращает данные в виде массива со следующими ключами:
Проверяем работоспособность прокси на php через crul с возможностью авторизации – truewebstories
// Проверяем работоспособность прокси на PHP через CURLfunction proveryaem_rabotosposobnost_proxy_cherez_curl ($host_and_port,$prxy_auth='',$url="https://www.google.com.ua/",$timeout=5){$proxy=$host_and_port;$ch=curl_init();// Initialise a cURL handle // Setting proxy option for cURLif(isset($proxy)){// If the $proxy variable is set, thencurl_setopt($ch, CURLOPT_PROXY,$proxy);// Set CURLOPT_PROXY with proxy in $proxy variable} // Set any other cURL options that are required// curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxy_auth); // Если понадобится авторизация на прокси. $prxy_auth = 'login:pass'curl_setopt($ch, CURLOPT_HEADER,FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch, CURLOPT_COOKIESESSION,TRUE);curl_setopt($ch, CURLOPT_FOLLOWLOCATION,TRUE);curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);curl_setopt($ch, CURLOPT_TIMEOUT,$timeout);// Определяет кол-во времени на попытку соединения https://toster.ru/q/418924curl_setopt($ch, CURLOPT_URL,$url); $results=curl_exec($ch);// Execute a cURL request//curl_close($ch); // Closing the cURL handleif($results===false){echo"Proxy is not working: ",curl_error($ch);}else{//print the outputecho"OK";}} // Пример вызова proveryaem_rabotosposobnost_proxy_cherez_curl ('35.246.154.253:3128'); // Процедурно$host='118.179.206.162';$port=9999; $host='35.246.154.253';$port=3128; $host_port='118.179.206.162:9999';$host_port='35.246.154.253:3128'; // $proxy = 'login:[email protected]:8080';$url="https://www.google.com.ua/"; $proxy='35.246.154.251:3128'; $ch=curl_init();// Initialise a cURL handle // Setting proxy option for cURLif(isset($proxy)){// If the $proxy variable is set, thencurl_setopt($ch, CURLOPT_PROXY,$proxy);// Set CURLOPT_PROXY with proxy in $proxy variable} // Set any other cURL options that are required// curl_setopt($ch, CURLOPT_PROXYUSERPWD, $prxy_auth); // Если понадобится авторизация на прокси. $prxy_auth = 'login:pass'curl_setopt($ch, CURLOPT_HEADER,FALSE);curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,FALSE);curl_setopt($ch, CURLOPT_COOKIESESSION,TRUE);curl_setopt($ch, CURLOPT_FOLLOWLOCATION,TRUE);curl_setopt($ch, CURLOPT_RETURNTRANSFER,TRUE);curl_setopt($ch, CURLOPT_TIMEOUT,5);// Определяет кол-во времени на попытку соединения https://toster.ru/q/418924curl_setopt($ch, CURLOPT_URL,$url); $results=curl_exec($ch);// Execute a cURL request//curl_close($ch); // Closing the cURL handleif($results===false){echo"Proxy is not working: ",curl_error($ch);}else{//print the outputecho"OK";}
Источнк
Список прокси
Список прокси
Скачивание файлов
При передаче указателя на открытый файл в параметре CURLOPT_FILE результат выполнения скрипта записывается сразу в файл.