Vincent1
@Vincent1

Php Curl — как узнать Content Lenth отправляемого запроса?

Отправляю файл 1test.jpg (85,210 bytes) на сервер при помощи PUT. Мне нужно знать точный Content Length, который получает сервер. Проблема в том, что сервер не сообщает какой был Content Length моего запроса, но при следующем обращении обязательно его требует.
Я пробовал указывать в Content Length размер отправляемого файла. Близко, но нет. В Content Length как минимум еще добавляется длина имени файла и что то еще не знаю что.
Чтобы узнать из чего формируется Content Length я исследовал curl_getinfo($this->_ch), но ничего полезного там не нашел.
cErViI.jpg
CURLOPT_VERBOSE тоже ничего полезного.
Далее пробовал слать запрос на свою тестовую страницу и видел, что в HEADERS есть информацию о Content Length
wjCogq.jpg
И это правильный Content Length, с которым сервис для которого я делаю клиент соглашается. Но я никак не могу понять как он точно формируется или где его найти
И как я уже писал выше это размер файла + длина его имени + ±200 символов.
Суть вопроса. Если Curl отправляет в заголовках Content Length запроса на сервер, то где я могу его найти перед отправкой?
  • Вопрос задан
  • 1390 просмотров
Решения вопроса 1
Vincent1
@Vincent1 Автор вопроса
Разорбрался. Отправлять файлы на сервер при помощи PUT нужно как в коде ниже
$fo = fopen ($filename, 'r');
        curl_setopt($this->_ch, CURLOPT_PUT, true);
        curl_setopt($this->_ch, CURLOPT_INFILE, $fo);
        curl_setopt($this->_ch, CURLOPT_INFILESIZE, filesize($filename));

Не правильно:
$post_data = ["file" => curl_file_create($file_name)];
curl_setopt($this->_ch, CURLOPT_CUSTOMREQUEST, 'PUT');
curl_setopt($this->_ch, CURLOPT_POSTFIELDS, $post_data);


В таком случае передается plain text, который будет обернут дополнительной информацией:
--------------------------5cff5c02b52f5c00
Content-Disposition: form-data; name="file"; filename="test.txt"
Content-Type: application/octet-stream
ВАШИ ДАННЫЕ
--------------------------5cff5c02b52f5c00--
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
считаешь сколько всего символов, длину строки плюс длина файла (filesize('A1.jpg')) добавляешь в заголовок Content Length
Ответ написан
dimonchik2013
@dimonchik2013
non progredi est regredi
@AUser0
Чем больше знаю, тем лучше понимаю, как мало знаю.
Посмотрите функцию curl_getinfo().
Скорее всего пригодится CURLINFO_HEADER_OUT, ну или CURLINFO_REQUEST_SIZE.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы