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

grigori

( ͡° ͜ʖ ͡°)
Команда форума
Автор оригинала: Sad Spirit
Есессно!
Какой бы придумать пример использования мульти-соединения, не нарушающий "моральные принципы" клуба?
Я делал поиск по нескольким поисковым системам сразу, но в этом много кода для поддержки API самих поисковиков (где-то XML, где-то JSON).

-~{}~ 05.08.09 01:07:

Alexandre
да, выкладывал, еще без мульти

-~{}~ 05.08.09 01:13:

AmdY, Sad Spirit прав - я те примеры писал таки не один день ;)

хотя ... на отлов и отладку некоторых ситуаций (вроде 100-го ответа) не один год уходит
надо уже новую версию публиковать
 

valeraorg

Новичок
Re: первый релиз PEAR::HTTP_Request2

Автор оригинала: Sad Spirit

чем просто curl?
  • У просто curl'а чудовищный API. :)

  • Апи конечно не особо красивый но пользоваться можно. Зато нету багов как у вас. Так например попробуйте загрузить файл на рапиду. Я еще не разобрался в чем прикол - но факт есть факт, оно не работает.
 

korchasa

LIMB infected
Автор оригинала: grigori
Какой бы придумать пример использования мульти-соединения, не нарушающий "моральные принципы" клуба?
Чье-то открытое API, например, Flickr
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Апи конечно не особо красивый но пользоваться можно. Зато нету багов как у вас. Так например попробуйте загрузить файл на рапиду. Я еще не разобрался в чем прикол - но факт есть факт, оно не работает.
Как бы помягче сформулировать... Тестировать класс со всеми сайтами, которые есть в интернетах, особенно с теми, к которым у меня нету логина с паролем, я вощемта и не планировал. Так что если реально получается загрузить файл на rapidshare при помощи curl'а, и не получается --- при помощи HTTP_Request2, то придётся напрячься самому и показать мне разницу в запросах-ответах. Оба средства позволяют получить тексты таковых.

Ну и можно попробовать выполнить запрос при помощи HTTP_Request2 с адаптером Curl. Может ещё баг с похапэшной поддержкой SSL нашёлся, не первый, чё уж...
 

valeraorg

Новичок
C ssl проблем нет. Адаптеры не влияли. Хидеры в запросе вроде одинаковые (с curl) и нормальные. Тело запроса вроде нормальное тоже. Короче в чем бага незнаю. На рапиде не надо аккаунта, просто при загрузке анонимно проявляеться тоже это бага. Рапида отвечает что file no choosen или что то типа этого. Да вам всего то и надо только такой запрос
Код:
$ch = curl_init("http://rs169l3.rapidshare.com/cgi-bin/upload.cgi");  
		   curl_setopt($ch, CURLOPT_POSTFIELDS, array('filecontent'=>"@$target"));
		   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		   
		   $postResult = curl_exec($ch);
Пример работает о вот ваша либа нет.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Да вам всего то и надо только такой запрос
Код:
$ch = curl_init("http://rs169l3.rapidshare.com/cgi-bin/upload.cgi");  
		   curl_setopt($ch, CURLOPT_POSTFIELDS, array('filecontent'=>"@$target"));
		   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		   
		   $postResult = curl_exec($ch);
Пример работает о вот ваша либа нет.
Хмм... А с HTTP_Request2 ты как это делаешь? А то есть у меня одно подозрение...
 

valeraorg

Новичок
Вы может неправильно меня поняли. Я выгляжу как патологический критик. Ваша либа лучшая как по мне из всех конкурентов. А я обзор делал основательный. Просто у меня возникла с ней вот такая проблема. Так что не обижайтесь.
А отсылаю примерно так
$client->setUrl('http://rs169l3.rapidshare.com/cgi-bin/upload.cgi');
$client->addUpload('filecontent', $path, $customName);
$client->send();
Урл сую не через конструктор, так как делаю серию запросов и использовнием cokkieJar (которого у вас нет, мне пришлось унаследоваться от вашего класса и добавить его). Но уверяю я осторожно унаследовался.
А вообще спасибо за либу.
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
иногда серверы требуют только multipart/form-data кодировку, или, наоборот, обычную
я сталкивался
если курлу давать параметры массивом - он посылает multipart, если обычно - как urlencoded
это такая хитрая фича
мне лично влом было писать обертку для multipart
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Вы может неправильно меня поняли. Я выгляжу как патологический критик. Ваша либа лучшая как по мне из всех конкурентов. А я обзор делал основательный. Просто у меня возникла с ней вот такая проблема. Так что не обижайтесь.
Да я не обижаюсь, и ошибки завсегда рад исправить. Просто для исправления нужна информация, а фразы "в курле работает, а у тебя --- хрен" маловато. :)

А отсылаю примерно так
$client->setUrl('http://rs169l3.rapidshare.com/cgi-bin/upload.cgi');
$client->addUpload('filecontent', $path, $customName);
$client->send();
Урл сую не через конструктор, так как делаю серию запросов и использовнием cokkieJar (которого у вас нет, мне пришлось унаследоваться от вашего класса и добавить его). Но уверяю я осторожно унаследовался.
Угу, понятно... А setMethod() делается? Потому что если нет, то пойдёт по умолчанию запрос GET, безо всяких приложенных файлов.

А вообще спасибо за либу.
Пожалста-пожалста.
 

valeraorg

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

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Кстати вы не знаете как запостить файл curl*ом так чтобы его имя отличалось от физического(так как это сделано у вас)?. Можно конечно собрать тело запроса вручную, а потом его скормить курлу, но мне нужно с буферизацией, так как файл большого размера. Поэтому файл нужно что бы считываля частями.
Тело запроса можно собирать с буферизацией, а скармливать curl'у через callback CURLOPT_READFUNCTION, собственно как у меня и сделано. См. HTTP_Request2_Adapter_Curl и HTTP_Request2_MultipartBody.
 

valeraorg

Новичок
Автор оригинала: Sad Spirit
Тело запроса можно собирать с буферизацией, а скармливать curl'у через callback CURLOPT_READFUNCTION, собственно как у меня и сделано. См. HTTP_Request2_Adapter_Curl и HTTP_Request2_MultipartBody.
Да, я смотрел как у вас, но это сильно сложно. Для либы годиться для моего прикладного случая - это слишком. А курл PHP разве не умеет работать c файловым дескриптором? Где-то я такое видел.
Кстати хочу все таки помочь найди ошибку, вот попробовал еще простой запрос сделать теперь уже изолированно и без наследников:

$client = new HTTP_Request2('http://rs68l3.rapidshare.com/cgi-bin/upload.cgi?rsuploadid=327611371798485496','POST');
$client->addUpload('filecontent', DOCROOT.'uploads/'.$task->files->name);
var_dump($client->send()->getBody());

У рапиды взрыв мозгов - говорит No file choosen
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Да, я смотрел как у вас, но это сильно сложно. Для либы годиться для моего прикладного случая - это слишком. А курл PHP разве не умеет работать c файловым дескриптором? Где-то я такое видел.
Умеет, но в этот файловый дескриптор придётся сначала положить тело запроса в формате multipart/form-data. :)


Кстати хочу все таки помочь найди ошибку, вот попробовал еще простой запрос сделать теперь уже изолированно и без наследников:

$client = new HTTP_Request2('http://rs68l3.rapidshare.com/cgi-bin/upload.cgi?rsuploadid=327611371798485496','POST');
$client->addUpload('filecontent', DOCROOT.'uploads/'.$task->files->name);
var_dump($client->send()->getBody());

У рапиды взрыв мозгов - говорит No file choosen
Так, я тут сам поигрался с рапидшарой, изучив предварительно описание API и предлагающийся пример скрипта на Перле, действительно не работает. Такое впечатление, что они не могут разобрать multipart/form-data, который я генерирую. При этом если заменить в HTTP_Request2_MultipartBody boundary на предлагаемый в их скрипте, всё ВНЕЗАПНО начинает работать!
PHP:
require_once 'HTTP/Request2.php';

$request = new HTTP_Request2('http://rapidshare.com/cgi-bin/rsapi.cgi?sub=nextuploadserver_v1');
$server = $request->send()->getBody();
if (!preg_match('/^(\\d+)$/', $server)) {
    echo "Неправильный сервер: {$server}";
}

$upload = new HTTP_Request2("http://rs{$server}l3.rapidshare.com/cgi-bin/upload.cgi", 'POST');
$upload->addUpload('filecontent', $filename);
$upload->addPostParameter('rsapi_v1', '1');

$response = $upload->send();

echo $response->getBody();
Вощемта надо дальше разбираться, кто виноват --- я, используя неправильный boundary, или рапидшара, не могущая его разобрать.

-~{}~ 09.08.09 15:51:

До кучи: АНАЛогичная проблема, по ходу косяк рапидшары?
 

valeraorg

Новичок
Но браузеры то все работают?!
Почему тогда вы формируете тело не так как все браузеры?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
мож они так усложняют жизнь аффтарам скриптов :)

-~{}~ 09.08.09 16:05:

судя по качеству описания API ... разработчики им пофиг
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
Но браузеры то все работают?!
Почему тогда вы формируете тело не так как все браузеры?
Ну мне кагбэ проще прочитать было RFC 2046, чем исподники браузеров... В каковом RFC, кстати, пример boundary идёт без чёрточек вначале.

Ладно, видимо добавлю чёрточки: мне пофиг, а рапидшаре приятно.
 

valeraorg

Новичок
Автор оригинала: Sad Spirit
Ну мне кагбэ проще прочитать было RFC 2046, чем исподники браузеров... В каковом RFC, кстати, пример boundary идёт без чёрточек вначале.

Ладно, видимо добавлю чёрточки: мне пофиг, а рапидшаре приятно.
А где можно скачать новую версию вашей либы "с черточками"?.
 

Sad Spirit

мизантроп (Старожил PHPClub)
Команда форума
Автор оригинала: valeraorg
А где можно скачать новую версию вашей либы "с черточками"?.
Пока нигде, но там вопрос замены строки
PHP:
$this->_boundary = 'PEAR-HTTP_Request2-' . md5(microtime());
на
PHP:
$this->_boundary = '--' . md5('PEAR-HTTP_Request2-' . microtime());
совсем долго разбираться, какие символы ему ещё не нравились, не стал. Но вот так работает.

-~{}~ 14.08.09 20:38:

Закинул в SVN "улучшенный" HTTP_Request2_MultipartBody и заодно, в качестве первого примера использования, скрипт залива файла на rapidshare.
 

fixxxer

К.О.
Партнер клуба
Кстати куча сервисов и парсеров требуют эти самые две черточки. Интересно, откуда это пошло...
 

DiMA

php.spb.ru
Команда форума
http://ru.wikipedia.org/wiki/MIME

<< Начало каждой части сообщения обозначается строкой «--граница». Конец последнего сообщения обозначается строкой «--граница--». >>

И т.д. ссылки на rfc.
 
Сверху