cURL. Получение заголовка после POST запроса.

Prestonicus

Новичок
cURL. Получение заголовка после POST запроса.

В общем есть файлообменник, закачка файлов на котором начинается после получения сервером POST запроса, содержащего ключ (который вводится в соотвествующей форме). Так вот, пытался сделать проверку на получаемый в ответ файл путем считывания заголовка:
PHP:
$tmp_ch = curl_init($LINK);
curl_setopt($tmp_ch, CURLOPT_HEADER, true);
curl_setopt($tmp_ch, CURLOPT_NOBODY, true);
curl_setopt($tmp_ch, CURLOPT_POSTFIELDS, $post); //$post - массив с соответстующим POST запросом
curl_exec($tmp_ch);
curl_close($tmp_ch);
А витоге сервер мне выдаёт весь файл целиком со следующим заголовком:
HTTP/1.1 100 Continue

HTTP/1.1 200 OK
Date: Thu, 04 Mar 2010 19:57:27 GMT
Server: Apache/2.2.6 (Fedora)
Last-Modified: Sun, 28 Feb 2010 12:42:41 GMT
Accept-Ranges: bytes
Expires: Thu, 11 Mar 2010 19:57:27 GMT
Content-Disposition: inline
Content-Length: 41943040
Connection: close
Content-Type: application/force-download

--------Содержимое файла--------
Что же делать?
 

SiMM

Новичок
У Вас там не один заголовок, а два. Возможно, поможет
PHP:
curl_setopt($tmp_ch, CURLOPT_FOLLOWLOCATION, false)
но не факт.

-~{}~ 05.03.10 16:11:

Возможно, поможет
PHP:
curl_setopt($tmp_ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
не помню, поддерживал ли 1.0 100 Continue
 

Prestonicus

Новичок
После curl_setopt($tmp_ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0); пропал HTTP/1.1 100 Continue, но всё равно начинает грузить весь файл. CURLOPT_FOLLOWLOCATION, false не помогает
 

WBS

Новичок
Ничем не отличается. Сорри, невнимательно прочитал Ваш пример. Видимо Ваш файл передается в заголовке. Т.е. Вам нужен не заголовок, а начало заголовка.

Варианты решения:
- скачать часть, прервав закачку по таймауту;
- скачать часть, прервав закачку при получении нужной части данных (используя неблокируемые сокеты).
 

Prestonicus

Новичок
Автор оригинала: Вурдалак
Prestonicus
Проблема как-то решилась? Какая-то она странная.
Поставил таймаут, как советовал WBS, но всё равно выглядит как костыль.
PHP:
$tmp_ch = curl_init($LINK);
curl_setopt($tmp_ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($tmp_ch, CURLOPT_POSTFIELDS, $post);
curl_setopt($tmp_ch, CURLOPT_TIMEOUT, 1);
curl_exec($tmp_ch);
$content = curl_getinfo($tmp_ch,CURLINFO_CONTENT_TYPE);
curl_close($tmp_ch);
Мне нужно было получить только CONTENT TYPE. Эта проблема в новой версии CURL, на сколько я понял. Получается что NOBODY теперь имеет смысл только для GET запроса, а при пост нужно как-то изворачиваться. Причем если поставить NOBODY после пост запроса, то последний даже не отправляется.
 

Вурдалак

Продвинутый новичок
А попробуй поиграться с порядком задания option'ов. Я один раз уже убедился, что порядок иногда имеет значение.

Попробуй, например,
PHP:
curl_setopt($tmp_ch, CURLOPT_POST, true);
curl_setopt($tmp_ch, CURLOPT_NOBODY, true);
curl_setopt($tmp_ch, CURLOPT_POSTFIELDS, $post);
http://icebeer.livejournal.com/19772.html
 

Prestonicus

Новичок
Автор оригинала: Вурдалак
А попробуй поиграться с порядком задания option'ов. Я один раз уже убедился, что порядок иногда имеет значение.

Попробуй, например,
PHP:
curl_setopt($tmp_ch, CURLOPT_POST, true);
curl_setopt($tmp_ch, CURLOPT_NOBODY, true);
curl_setopt($tmp_ch, CURLOPT_POSTFIELDS, $post);
http://icebeer.livejournal.com/19772.html
Пробовал, не помогает.
 
Сверху