Комментарии 12
Велосипедисты такие велосипедисты. Я просто оставлю это здесь github.com/rmccue/Requests
0
хм, а че Guzzle не устроил? github.com/guzzle/guzzle
+1
ну, php 5.5 же на дворе уже давно.
зачем городить глобальные HttpRequest, HttpRequestException, HttpURLConnection? Не говоря уже про SocketInterface.
зачем городить глобальные HttpRequest, HttpRequestException, HttpURLConnection? Не говоря уже про SocketInterface.
+1
1. У вас в коде перемешаны русскоязычные англоязычные описания:
Логично их иметь на одном языке и предпочтительно английском.
То же самое относится и к исключениям:
2. Не стоит пихать несколько интерфейсов и классов в один файл. Лучше грузить их через autoloader или включать в заголовке. По этой же причине мне не нравится эта функция:
Вроде и все правильно, но есть ощущение хардкода
3. Класс Socket
Есть ощущение, что в большинстве случаев это не оптимальный выход. При редиректах внутри домена (как это чаще всего бывает) сокет закрывать незачем, это потеря времени и ресурсов.
/**
* Get status message of the response
*
* @return string message
*/
public function message()
{
return $this->getConnection()->getResponseMessage();
}
/**
* Добавляет параметры из объекта/массива $params к основному URL
*
* @param string $url
* @param array|object $params
* @return string
*/
private function append($url, $params)
{
return $url.(strpos($url, '?') === false ? '?' : '&').http_build_query($params);
}
Логично их иметь на одном языке и предпочтительно английском.
То же самое относится и к исключениям:
throw new HttpRequestException('Это не ссылка на файл');
2. Не стоит пихать несколько интерфейсов и классов в один файл. Лучше грузить их через autoloader или включать в заголовке. По этой же причине мне не нравится эта функция:
public static function create($url)
{
$basepath = dirname(__FILE__).DIRECTORY_SEPARATOR.'implements'.DIRECTORY_SEPARATOR;
// предпочтение отдается библиотеке CURL
if (extension_loaded('curl') && file_exists($basepath.'CURL.php'))
{
require_once $basepath.'CURL.php';
return new CURLInterface($url);
}
if (function_exists('fsockopen') && file_exists($basepath.'Socket.php'))
{
require_once $basepath.'Socket.php';
return new SocketInterface($url);
}
}
Вроде и все правильно, но есть ощущение хардкода
3. Класс Socket
if(is_resource($this->socket)) // при повторном обращении если follow_redirects
fclose($this->socket);
Есть ощущение, что в большинстве случаев это не оптимальный выход. При редиректах внутри домена (как это чаще всего бывает) сокет закрывать незачем, это потеря времени и ресурсов.
+3
Спасибо за дельные замечания, обещаю перевести все комментарии.
По поводу 2 пункта, хотелось что бы файлов было как можно меньше для простоты использования, по поводу хардкода существует метод setConnectionFactory, который позволяет определять собственные реализации.
Если бы в PHP можно было использовать вложенные классы, код выглядел бы на порядок эстетичней.
По поводу 2 пункта, хотелось что бы файлов было как можно меньше для простоты использования, по поводу хардкода существует метод setConnectionFactory, который позволяет определять собственные реализации.
Если бы в PHP можно было использовать вложенные классы, код выглядел бы на порядок эстетичней.
+1
При работе с курлом у вас закрывается дескриптор на каждый запрос?
0
Дескриптор закрывается, когда уничтожается экземпляр класса.
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".
Я читал здесь статью по поводу открытых дескрипторов и заголовка keep-alive, но лично я придерживаюсь мнения, что "PHP создан, чтобы умирать".
0
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
HttpRequest — библиотека для простой работы с HTTP протоколом