jURL Bundle – поддержка curl функций
Пакет расширений для работы с сетью c поддержкой curl_* функций.
GitHub
README.md
Пакет расширений для работы с сетью c поддержкой curl_* функций
Возможности
- Работа с куками
- Работа с прокси
- Отправка POST, PUT, DELETE запросов
- Загрузка файлов
- Изменение User-Agent, Referer
- Поддержка Basic авторизации (пример)
- Отображение ошибок и характеристик соединения
Wiki
- Установка и обновление
- Методы класса jURL
- Поддержка параметров cURL
- Поддержка функций cURL
- Примеры
- Демо-проекты
- Тема на форуме
Changelog
--- 1.1 --- [Fix] Иногда не создавался файл с куками [Add] Поддержка класса cURLFile и функции curl_file_create [Add] Авторизации при подключении к прокси (параметр CURLOPT_PROXYUSERPWD, функция jURL::setProxyAuth('login::password')) --- 1.0.3 --- [Fix] После загрузки файла на сервер не закрывался поток для чтения --- 1.0.2 --- [Fix] Ошибка с отправкой raw post [Fix] Exception при получении кода 404 [Add] В компоненте загрузчик добавлено отображение имени скачиваемого файла --- 1.0.1 --- [Fix] Ошибка, возникающая если перед скачиванием файлов был редирект [Fix] Заголовки не выводятся в файл при setReturnHeaders(true) [Fix] Ошибка при установке/удалении пакета, если отсутствовал файл .bootstrap --- 1.0 --- [Add] Компонент загрузчик [Add] Многопоточная загрузка [Add] Добавлена поддержка функций http_build_query, parse_str [Add] Метод reset для сброса параметров (curl_reset) [Fix] Исправлена одновременная отправка файлов и переменных методом POST [Fix] Прочие исправления --- 0.6 --- [Add] Загрузка только заголовков без тела запроса (cURL - CURLOPT_NOBODY; jURL - setReturnBody) [Fix] Скачаный файл заблокирован процессом [Fix] Ошибки при установке некорректных и неподдерживаемых параметров CURLOPT_* [Change] В случае ошибки jURL выбрасывает jURLException --- 0.5 --- [Change] Модуль переделан в пакет расширений --- 0.4.0.1 --- [Fix] Ошибка при подключении модуля к форме --- 0.4 --- [Fix] Компилируются в байт-код все компоненты модуля [Fix] Исправление ошибок --- 0.3.1 --- [Add] Добавлены подсказки [Fix] Исправлен баг, из-за которого прогресс загрузки мог не дойти до 100% --- 0.3 --- [Add] Добавлены параметры CURLOPT_POST, CURLOPT_GET, CURLOPT_PUT, CURLOPT_INFILE
Сборка расширения
Windows
gradlew.bat bundle
Linux
gradlew
Здравствуйте. При попытке скачать файл весом 1.3гб в количестве потоков > 1, иногда загрузка не начинается, выбивает исключение, я проследил, откуда это идёт. Я бы скачивал в одном потоке, но сохранить файл из tmp не получается: “OutOfMemory”, подозреваю из-за большого веса. На строку $stream->read($p[‘to’] – $p[‘from’] + 1) в коде загрузчика выбивает.
Если загружать в многопотоке, то получается, что в момент начала загрузки ошибка в этом участке public function asyncExec($callback = null){
$this->thread = new Thread(function () use ($callback){
try{
$result = $this->Exec();
} catch (jURLException $e) {
// здесь
$result = false;
Самое интересное, что начать загрузку заново не получается, она зависает, и если в этот момент загрузка продолжится с помощью костылей, то последний файл tmp остаётся весом 0 и загрузка замирает. А вот если изначально загрузка началась успешна, то файл скачается и сохраниться успешно.
Может, у вас есть решение? Буду благодарен
Не пойму как скачать PHP файл. При попытке скачать файл с сервера, он сохраняется, но содержимое файла выглядит таким образом: “”status”:”could not find driver” и “”status”:”\u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445″””
В .htaccess запретов нет, вообще удалил его для проверки.
2.0.0.13-dev
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $timeout);
curl_setopt($ch, CURLOPT_PROXY, $proxy_ip );
curl_setopt($ch, CURLOPT_PROXYUSERPWD, $loginpassw);
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
При использовании защищенного прокси, к примеру, для подключения к https://, в любом случае выдаст false. Обычный адрес отрабатывает
Здравствуйте! Не работает curl_setopt. Ошибки в логе такие
[DEBUG] load cached ‘res://bundle/jurl/jURL.php’, 14 ms
Notice: Use of undefined constant CURLOPT_URL – assumed ‘CURLOPT_URL’ in ‘res://app/forms/MainForm.php’ on line 139 at pos 26
Notice: Use of undefined constant CURLOPT_HTTPHEADER – assumed ‘CURLOPT_HTTPHEADER’ in ‘res://app/forms/MainForm.php’ on line 140 at pos 26
Notice: Use of undefined constant CURLOPT_TIMEOUT – assumed ‘CURLOPT_TIMEOUT’ in ‘res://app/forms/MainForm.php’ on line 141 at pos 26
Notice: Use of undefined constant CURLOPT_CONNECTTIMEOUT – assumed ‘CURLOPT_CONNECTTIMEOUT’ in ‘res://app/forms/MainForm.php’ on line 142 at pos 26
Notice: Use of undefined constant CURLOPT_FOLLOWLOCATION – assumed ‘CURLOPT_FOLLOWLOCATION’ in ‘res://app/forms/MainForm.php’ on line 143 at pos 26
Notice: Use of undefined constant CURLOPT_MAXREDIRS – assumed ‘CURLOPT_MAXREDIRS’ in ‘res://app/forms/MainForm.php’ on line 144 at pos 26
Notice: Use of undefined constant CURLOPT_RETURNTRANSFER – assumed ‘CURLOPT_RETURNTRANSFER’ in ‘res://app/forms/MainForm.php’ on line 145 at pos 26
Notice: Use of undefined constant CURLOPT_POST – assumed ‘CURLOPT_POST’ in ‘res://app/forms/MainForm.php’ on line 146 at pos 26
Notice: Use of undefined constant CURLOPT_POSTFIELDS – assumed ‘CURLOPT_POSTFIELDS’ in ‘res://app/forms/MainForm.php’ on line 147 at pos 26
Какая версия dn и какая версия пакета?
Все последние.
DN 16.7.0
jUrl 1.1
Сейчас через new jUrl сделал, но хотел сначала на curl_init, но он до сих пор не работает, вернее не учитываются setopt, например, вместо HTTPHEADER application/json почему x-www-urlencoded пишется.
А если использовать эту версию
https://github.com/TsSaltan/DevelNext-jURL/releases/tag/2.0.0.13-dev
ошибка есть?
Нет, ошибка пропала и больше её нету. Всё заработало корректно через cURL.
Здравствуйте а как сделать провеку файло на хостинге http://www.host/admin/version
если там 0 то будет собщения no если 1 то будет yes ? ;
Для этого можно использовать file_get_contents
Мне сказали что лутше jurl
дословно (file_get_content с https ?? Вам лучше использовать cUrl от Салтан)
В DN эта функция нормально работает с Https. Если нужно расширение jurl, там такой же синтаксис, как у curl функций для PHP: http://php.net/manual/ru/function.curl-exec.php#98628
А что с if ?
if(file_get_content(‘https://scruffy.handyhost.ru:1500/ispmgr/www/LOcal/BlackRoom/Version’, ‘beta 2.0’)){
alert(0);
} else {
alert(1);
}
с случием if всегда выводит сообщения 0 но если изменить http то выдает 1 , а при изменении beta 2.0 выдает 0
Здравствуйте, а почему когда отправляешь заголовок через $ch->addHttpHeader(‘Content-Type’, ‘application/json’); вместо application/json идёт application/x-www-form-urlencoded ? Как это можно исправить?
Отправляется post запрос?
Да
Вот так работает
А не я понял почему не работало я отправляю $ch->setPostData($data_string); где $data_string = {‘name’:’value’} а надо $data_string = Str::Decode( {‘name’:’value’});
Спасибо что ответил.
Здравствуй, я тут решил бота для Telegram сделать. Так вот: там баг с SendPhoto. Уже 3 день не могу никак кастыль придумать. Можешь помочь если не трудно. Нужно локальную пикчу отправить в чат Telegram.
Попробуйте установить последнюю версию пакета
https://github.com/TsSaltan/DevelNext-jURL/releases/download/2.0.0.9-dev/dn-jurl-bundle.dnbundle
(это «ночная» сборка, возможно, там исправлен этот баг)
Может быть я что то делаю не так?
$SendPhoto = ‘https://api.telegram.org/bot’ . $token . ‘/SendPhoto’;
$chatId = $response[‘result’][$updateId][‘message’][‘from’][‘id’];
$uploadFile = ‘C:\screenshot.png’;
$ch = new jURL($SendPhoto);
$ch->setRequestMethod(‘POST’);
$ch->setPostData(‘chat_id’ => $chatId);
$ch->addPostFile(‘photo’, $uploadFile);
$ch->asyncExec(function($result){
var_dump($result);
});
$ch->setPostData([‘chat_id’ => $chatId]);
Тут скобок не хватает, может в этом дело?
Я недавно делал такого бота, проект могу завтра скинуть
На счет проекта было бы не плохо, благодарю за уделенное время.
Целый день уже не могу эту функцию добавить))….
Там был рабочий код, проблема была в тех непроставленых скобках
$url = ‘https://api.telegram.org/bot’ . $this->botKey . ‘/sendPhoto’;
$ch = new jURL($url);
$ch->addPostFile(‘photo’, ‘path/to/file’);
$ch->setPostData([‘chat_id’ => $chat_id]);
проверил, работает
у меня получилось только через cURL
Приветствую!
Не хватает поддержки:
$curl->setOpt(CURLOPT_RETURNTRANSFER, TRUE);
$curl->setOpt(CURLOPT_SSL_VERIFYPEER, FALSE);
При недействительном сертификате не работает.
Добрый день!
CURLOPT_RETURNTRANSFER – работает, данные возвращаются, возможно какой-то баг, если в ответе пусто, вот последняя версия (ночная сборка)
CURLOPT_SSL_VERIFYPEER – проверку сертификата, увы, пока не получается отключить, нужно ковырять настройки java
Добрый день, Алексей!
Спасибо за ночную сборку! Чуть позже проверю, скорей всего проблема устранена.
А вот на счет CURLOPT_SSL_VERIFYPEER, жаль что нет возможности отключать.
Делаю приложение для управления ISPManager через API, и сертификаты там всегда самоподписанные и разумеется CURL ругается.
А вот самоподписанный сертификат может и получится завести, посмотрю, как это организовано в java. Я так понимаю, приватный ключ есть?