первый релиз PEAR::HTTP_Request2

valeraorg

Новичок
Тут собрался навешивать обсервер на вашу либу и возникли вопросы. Доки конечно у вас нет, но и бог с ней. Поковырялся в коде и кое что непонятно.
Идет upload большого файла. Файл считывается частями, при каждом считывании выполняется event sentBodyPart и записывается туда длина отосланного фрагмента. Я могу аккумулировать эту длинну и считать ее отправленной, ну и например положить ее в кеш (типа шаред мемори). А общую длину тела беру у метода getLength() что в классе HTTP_Request2_MultipartBody. Я правильно понимаю общий алгоритм?

-~{}~ 18.08.09 14:52:

Хотел добавить. Код у вас невероятно качественный. Спасибо! Сейчас 90% кода на php гавно редкое. Приятно видеть качественный код.
 

sanya_php

Новичок
1. а через SOCKS5 ваш request2 работает?
2. тяжело ли будет перевести код написанный с использованием PEAR/HTTP/HTTP_Client на ваш REquest2 ?
 

valeraorg

Новичок
Скажите а как можно с помощью вашей библиотеки скачать файл? Только конечно getBody() не подходит, так оно вернет мне все тело. А файл будет большим, поэтому надо писать частями файл.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Скажите а как можно с помощью вашей библиотеки скачать файл? Только конечно getBody() не подходит, так оно вернет мне все тело. А файл будет большим, поэтому надо писать частями файл.
Специально ж документацию писал, причём именно с этим примером в конце: http://pear.php.net/manual/en/package.http.http-request2.observers.php
 

valeraorg

Новичок
Сори! Не видел что появилась дока.

-~{}~ 21.10.09 17:56:

Как скачать понятно. А как насчет прогрессбара. Как в обсервере получить статус загрузки. Ну обчщее количество еще можно взять с хидера сервера. А текущее?
Приходит на ум конечно вычислять количество итераций (кол-во вызовов метода update обсервера) умноженное на размер буфера из конфига, но как-то это через задницу. Получше решения нет?
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Как скачать понятно. А как насчет прогрессбара. Как в обсервере получить статус загрузки. Ну обчщее количество еще можно взять с хидера сервера. А текущее?
Приходит на ум конечно вычислять количество итераций (кол-во вызовов метода update обсервера) умноженное на размер буфера из конфига, но как-то это через задницу. Получше решения нет?
::удивлённо смотрит::
А мысль складывать длины приходящих кусочков ответа чем не нравится?..
 

valeraorg

Новичок
Есть еще один вопрос. Если мне нужны из ответа только хидеры без тела - как поступить?. Иными словами нужно оборвать дальнейшую загрузку ответа. Пока только на ум приходит выкидывать в обсервере свой Exception, потом ловить его и далее разворачивать логику, но как-то это опять через зад.
 

valeraorg

Новичок
аааааааа.... Если честно я и знал про это. Поздно - гоню беса.
Спасибо!!!

-~{}~ 20.11.09 17:23:

Сделал в вашей либе запрос HEAD. Но он похоже не работает.
Запрос делаю на адрес http://billing.fastvps.ru/testfile.zip Или на любой другой.
Немогу сказать точно что не так, но что-то работает не так :)

-~{}~ 20.11.09 17:25:

Похоже что идет запрос GET только потом тело чистится. По крайней времени время запроса и ответа, наводит на такие мысли. Хотя getBody показывает пустую строку
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Сделал в вашей либе запрос HEAD. Но он похоже не работает.
Запрос делаю на адрес http://billing.fastvps.ru/testfile.zip Или на любой другой.
Немогу сказать точно что не так, но что-то работает не так :)

-~{}~ 20.11.09 17:25:

Похоже что идет запрос GET только потом тело чистится. По крайней времени время запроса и ответа, наводит на такие мысли. Хотя getBody показывает пустую строку
Чё-то какое-то гонево. Проверил у себя
PHP:
require_once 'HTTP/Request2.php';
require_once 'HTTP/Request2/Observer/Log.php';

$req = new HTTP_Request2('http://billing.fastvps.ru/testfile.zip', HTTP_Request2::METHOD_HEAD);
$req->attach(new HTTP_Request2_Observer_Log());

$req->send();
Вывод в консоль:
Код:
* Connected to tcp://billing.fastvps.ru:80
> HEAD /testfile.zip HTTP/1.1
> User-Agent: HTTP_Request2/0.5.0 ([url]http://pear.php.net/package/http_request2[/url]) PHP/5.3.1RC1
> Host: billing.fastvps.ru
> Accept-Encoding: gzip, deflate
>
< HTTP/1.1 200 OK
< date: Fri, 20 Nov 2009 15:37:17 GMT
< server: Apache/2.2.3 (Debian) PHP/5.2.0-8+etch15 mod_ssl/2.2.3 OpenSSL/0.9.8c
< last-modified: Wed, 25 Feb 2009 19:55:16 GMT
< etag: "11880ed-6422c40-9d51d100"
< accept-ranges: bytes
< content-length: 105000000
< content-type: application/zip
<
Отрабатывает практически мгновенно.

-~{}~ 20.11.09 18:34:

Ааа, б#я, а вот с Curl'ом подвисает. По ходу тупое животное ждёт указанных в заголовке мегабайт.
 

valeraorg

Новичок
Вот теперь могу сказать точно. Через сокеты у меня все работает прекрасно так же как и у вас. А вот через курл, все не так прекрасно
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Уже выяснил, лечится добавлением в HTTP_Request2_Adapter_Curl::createCurlHandle()
PHP:
        switch ($this->request->getMethod()) {
...
            case HTTP_Request2::METHOD_HEAD:
                curl_setopt($ch, CURLOPT_NOBODY, true);
                break;
...
        }
Придётся видимо 0.5.1 выпускать, уже есть пара исправлений...
 
Сверху