Команда Yii выпустила официальное расширение-клиент HTTP. Написано почти целиком Павлом Климовым. До последнего времени не было тегнуто как релиз из за несовместимости с PSR-7, хотя уже много где использовалось. После долгих обсуждений было решено выпускать без PSR-7. К нему, возможно, вернутся в 2.1.x.
Выполнение HTTP запроса выглядит вот так:
use yii\httpclient\Client;
$client = new Client();
$response = $client->createRequest()
->setMethod('post')
->setUrl('http://example.com/api/1.0/users')
->setData(['name' => 'John Doe', 'email' => 'johndoe@domain.com'])
->send();
if ($response->isOk) {
$newUserId = $response->data['id'];
}
Комментарии (37)
Alland456
10.11.2016 16:14-3На досуге, посмотрите фильм «Масло Лоренцо». Основан на реальных событиях.
Вкратце, фильм о том, что поражённые и разочарованные некомпетентностью медиков, родители решают сами искать средство лечения для своего угасающего на глазах сына. Причем, оба были очень далеки от медицины. И в результате они нашли способ победить болезнь. Их сыну это уже правда не помогло, но это позволило спасти тысячи других детей, дать им возможность нормально жить, расти, развиваться. Тем, кому профессора медицины, практики, которые много много лет изучали, продвигали, практиковали медицину, так и не смогли бы помочь.
QuickStudio
01.07.2016 20:34+6конечно, избавиться. Почти каждый сторонний пакет тянет за собой guzzle
XoJIoD
10.11.2016 16:48-1Видимо книга Брайана Грина «Ткань космоса» (а судя по иллюстрациям автор вдохновлялся ей) каждого читателя подталкивает на эту идею) Я, в своё время, тоже после её прочтения описал эту идею, правда не так развернуто, Арутюнову Константину Юрьевичу из ВШЭ. Но толи мы друг друга не поняли, толи он уже устал отвечать на подобные вопросы, потому что в конечном итоге он перестал мне отвечать) Так что вместе с автором жду опровержения от более подкованных в матчасти товарищей
QDeathNick
10.11.2016 16:53Ну, если это всё ещё подписать ЭЦП, чтобы пришёл человек, вы уже после этого генерируете подпись, и сличаете с той, что он принёс. :)
После этого можно было бы и подписать, только зачем? Ведь если вы не подпишите, всё равно всё уже будет создано, ведь он пришёл.
eskrano
01.07.2016 22:54+6Зачем придумывать велосипед если уже есть? Но судя по коду, вижу, что удобненько. А судя по комментариям согласшусь на счет GUZZLE.
springimport
02.07.2016 01:20Чем так плох Guzzle?
SamDark
02.07.2016 01:21Он не плох, но тяжёл как в плане зависимостей, так и в плане API.
Borro
02.07.2016 16:59+3А ваш требует yii2, поэтому просто так его не подключить. Кстати, не вижу, чтобы у Guzzle было много зависимостей:
— guzzlehttp/guzzle
— — guzzlehttp/promises
— — guzzlehttp/psr7
— — — psr/http-messageSamDark
02.07.2016 17:13-3Так его и будут использовать с Yii 2.0. Он по другому и не может работать...
symbix
02.07.2016 21:14А зачем делать завязку на фреймворк там, где без нее спокойно можно обойтись?
Вообще аргументы странные. Объем (хотя не вижу ничего объемного) — ну, не знаю, мне что-то прямо вспоминается, как заливал HTML на 14400 по фтп на хостинг с 2 Мб места. API кажется тяжелым — можно сделать фасад/адаптер.
Мне кажется, дело в другом — у Guzzle найден фатальный недостаток :-)SamDark
02.07.2016 21:28Посмотрите исходник. Нельзя там просто так обойтись не продублировав
yii\web\Cookie
иyii\web\HeaderCollection
, которые в фреймворке уже есть.
Я ни разу не говорил про размер на диске.
API кажется тяжелым — можно сделать фасад/адаптер.
Так это он и есть. Хотите — реализуйте драйвер, который будет использовать Guzzle.
Borro
02.07.2016 21:34выделите
yii\web\Cookie
иyii\web\HeaderCollection
в отдельные модули и избавитесь от дублирования кода. Мне вот нравится AR Yii, но просто так её не получится использовать, т.к. нужно тащить весь фреймворк.Stalker_RED
10.11.2016 23:57Почему только на микро? На спутниках GPS регулярно корректируют часы, т.к. спутники движутся быстрее чем поверхность земли. Вполне себе макро объект.
grishkaa
02.07.2016 06:28-4Ведь использовать file_get_contents было бы слишком просто.
Igogo2012
02.07.2016 13:31-5Особенно если нужно оправить данные методом POST
grishkaa
02.07.2016 18:13+6Вы не поверите...
Но можете минусовать дальше, конечно. Законом не запрещено.
mnv
02.07.2016 13:32-1Как с
file_get_contents()
например настроить таймаут на ожидание ответа?Borro
02.07.2016 16:46+6Конечно, для этого нужно добавить контекст
file_get_contents('http://ya.ru', false, stream_context_create(['http' => ['timeout' => 5.5]]));
context.http.timeout
saggid
02.07.2016 10:15На данный момент использую уже несколько лет php-curl-class, и вроде вполне доволен.
maslyaev
10.11.2016 20:56И даже если мы не сможем путешествовать во времени, мы ведь можем искать следы этих изменений.
Собственно, так мы всю жизнь и делаем. И очень в этом поднаторели ;)
Такая точка зрения на время — вовсе не моё изобретение. В первый раз я с такими рассуждениями столкнулся в книжке Дэвида Дойча «Структура реальности». Но вообще, в целом похожие рассуждения о времени есть у Канта в КЧР. Эйнштейн, кстати, эту книжку зело уважал.
На физиологию я бы особо не завязывался. Очень большой риск нарваться на логическую петлю.
G1K
02.07.2016 17:14+1Отличная новость, спасибо автору! По коду и примерам просто и удобно.
Расширить доки и добавить на русском было бы неплохо.
L0NGMAN
04.07.2016 02:24Я тоже сомневаюсь что стоит разработывать велосипеды когда есть уже готовые и главное — хорошые решения. Ведь все используют Guzzle…
SamDark
04.07.2016 12:08Мы тоже сомневались, но 13000 установок убедили нас...
EvgK
11.11.2016 23:11Но мы можем отложить это решение прямо в эксперименте из статьи, однако на экране никогда не будет интерференции (независимо от того, когда мы детектируем холостые, и детектируем ли вообще). Возможно вы имеете в виду не двухщелевую (интеренфереционную) картину, а наоборот? Тогда все верно.
SamDark
05.07.2016 23:58+1А при чём тут цифры Guzzle всех версий с 2011 года? Несомненно, библиотека очень популярная, но она не единственная. Люди пользуются buzz, zend-http, httpful и так далее. Мы сделали довольно тонкую обёртку с двумя простыми драйверами. Драйвер под Guzzle тоже можно сделать. Цифры для не релизнутого расширения вполне нормальные. Например, вот Sphinx: https://packagist.org/packages/yiisoft/yii2-sphinx
sanchezzzhak
04.07.2016 12:08нету поддержки multi curl или я не увидел
лично я использую khr/php-mcurl-client для мульти отправки
для обычной рутины самопал codepaste.net/g92i1n
метод send, если честно взбесил, можно сделать отправку на конечных методах (get put post delete)Zhuravljov
04.07.2016 15:30+1нету поддержки multi curl или я не увидел
Есть. Будет работать асинхронно если использовать CurlTransport.
sanchezzzhak
06.07.2016 15:24спасибо, пока модерировали комментарий полазил по коду и доке нашел отправку, прошу не учитывать мое мнение выше в комментарии оно не актуально.
affka
Шикардос! :)