[curl] POST и CURLOPT_NOBODY

Дед Анвирыч

Новичок
[curl] POST и CURLOPT_NOBODY

Всем здравствуйте!

обноружил странную проблему.
если при конекте выставлять CURLOPT_NOBODY=1, POST переменные не передаются! :confused:
т.е. сам вызов происходит, но переменные не приходят
версия курл - 7.15.3

-~{}~ 10.10.06 20:37:

нашел вот глубоко в доках
When setting CURLOPT_POST to a non-zero value, it will automatically set CURLOPT_NOBODY to 0 (since 7.14.1).

как же быть?
пробывал установить CURLOPT_RESUME_FROM в заведомо большое число - не делает запросов вообще.

как же быть?
 

Найч

Алгоритмик :-)
звучит странно
выставляя CURLOPT_NOBODY=1 ты отправляешь HEAD запрос
 

Дед Анвирыч

Новичок
Хм.. я думал обычный запрос, просто с ответ не возвращается...

так а как тогда можно послать post запрос, получив в ответ минимальное количество трафика (например только заголовки ответа)
 

partizan

Новичок
А что, так принципиально NOBODY?
Трафик секономить?

CURLOPT_RESUME_FROM: Pass a long as a parameter that contains the offset, in bytes, that you want the transfer to start from.

-~{}~ 10.10.06 22:55:

Попробуй поставить CURLOPT_RESUME_FROM 1000000
 

partizan

Новичок
Не происходит, если CURLOPT_RESUME_FROM больше, чем размер ответа?

Странно, откуда он вообще узнает этот размер, если не происходит обращения?
 

Дед Анвирыч

Новичок
а кто его знает :(

curl_setopt($conn[$k1], CURLOPT_RESUME_FROM, 1024);

ошибка:
Could only read 4294967295 bytes from the input

-~{}~ 10.10.06 23:19:

если
curl_setopt($conn[$k1], CURLOPT_RESUME_FROM, 4294967295);
возвращает ответ с начала до конца

-~{}~ 10.10.06 23:20:

бррр, стоп... а это разве не для частичного аплоада?

-~{}~ 10.10.06 23:23:

а, нет... для загрузки.
только вот такая непонятная ошибочка :(
 

partizan

Новичок
Эксперементально выяснил, что мин. число, которое нужно поставить - 2147483648.

Если меньше - ничего не происходит.

Но это же 2 гига!
 

hermit_refined

Отшельник
Если вы откажетесь полностью получать ответ, то с большой вероятностью прервёте тем самым выполнение скрипта - примерно в тот момент, когда он начнёт что-то выводить.

Если это устраивает, то можно либо использовать CURLOPT_HEADERFUNCTION и возвращать -1, чтобы прервать получение ответа, либо CURLOPT_WRITEFUNCTION и возвращать... например 0. В итоге получение ответа закончится с ошибкой CURLE_WRITE_ERROR.
(Сам не пробовал, основываюсь на http://documents.dhs.net.ru/local/curl/libcurl/curl_easy_setopt.html )
(Но, imho, через fsockopen() проще.)
 

partizan

Новичок
Автор оригинала: Дед Анвирыч
а вот нифига. контент всеравно забирает с самого начала. т.е. с нуля
Да я знаю, что с нуля. но если меньше поставить - вообще ничего не происходит, а так хоть работает.

Есть еще:
CURLOPT_RANGE: Pass the specified range you want. It should be in the "X-Y" format, where X or Y may be left out. The HTTP transfers also support several intervals, separated with commas as in X-Y,N-M.

Но всеравно весь файл возвращает (у меня тестовый файл - 10 байт). Сейчас ищу, в каких единицах эти X и Y указываются
 

Дед Анвирыч

Новичок
да! то что надо ! ;)

-~{}~ 10.10.06 23:54:

CURLOPT_RANGE работает далеко не на всех серверах, дай бог на 5%
решение с CURLOPT_HEADERFUNCTION подошло идеально
 

Pingvin22

Новичок
Re: [curl] POST и CURLOPT_NOBODY

Автор оригинала: Дед Анвирыч
Всем здравствуйте!

обноружил странную проблему.
если при конекте выставлять CURLOPT_NOBODY=1, POST переменные не передаются! :confused:
т.е. сам вызов происходит, но переменные не приходят
тоже столкнулся с данной проблемой, но предложенные варианты меня не устраивают т.к. генерируется ошибка curl. Кто знает можноли по человечески решить проблему с NOBODY когда отправлеш post?
 
Сверху