EOMY.NET
Хостинг EOMY.NET: Форум поддержки
 
 FAQFAQ   ПоискПоиск   ПользователиПользователи   ГруппыГруппы   РегистрацияРегистрация 
 ПрофильПрофиль   Войти и проверить личные сообщенияВойти и проверить личные сообщения   ВходВход 
RSS Feed  

HTTP POST средствами php

 
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB
HTTP POST средствами php
Автор Сообщение
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:10    Заголовок сообщения: HTTP POST средствами php Ответить с цитатой

Требуется отправить бинарный файл (картинку) http post запросом на языке php.
В принципе сам запрос проблем не вызывает и с текстовыми данными работает правильно, но когда вместо текста пытаюсь отправить изображение, то возвращается ошибка "содержимое не является изображением".
Исходный код следующий:
Код:
$post = file_get_contents($filename);
       $fp = fsockopen("$host",80);
       $headers = "POST /post.php HTTP/1.1\r\n"
               ."Host: $host\r\n"
             ."Content-type: image/jpeg\r\n"
             ."Content-length: ".strlen($post)."\r\n\r\n";
      fwrite($fp,$headers.$post);
      $resp='';
      while(!feof($fp)){$resp.=fread($fp,1024);}
      fclose($fp);


Проблема состоит в том, что при загрузке файла file_get_contents (как и другими командами) содержимое интерпретируется как строка, как сделать так чтобы оно интерпретировалось как binary.

Благдарность выразится в размере 1000 монет Very Happy.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

432 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:30    Заголовок сообщения: Ответить с цитатой

Проблема современной молодёжи. Никогда не дочитываю до конца.
Флаг аля аргумент FILE_BINARY для кого придумали?
_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Веденин
Красные глаза
Красные глаза


Зарегистрирован: 17.05.2007
Сообщения: 2066
Откуда: Самара
11733 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:30    Заголовок сообщения: Ответить с цитатой

Есть два формата отправки POST запроса
1) application/x-www-form-urlencoded - отправка строки
2) multipart/form-data - отправка файлов
Вы используете формат первого запроса (хотя по моему тип указываете второго), вам нужно использовать формат вида:
Код:
$post = "POST http://www.site.ru/postnews.html HTTP/1.0\r\n
Host: www.site.ru\r\n
Referer: http://www.site.ru/news.html\r\n
Cookie: income=1\r\n
Content-Type: multipart/form-data; boundary=1BEF0A57BE110FD467A\r\n
Content-Length: "strlen($post).'\r\n
\r\n
--1BEF0A57BE110FD467A\r\n
Content-Disposition: form-data; name="img_file"; filename="img.jpg"\r\n
Content-Type: application/octet-stream\r\n
Content-Transfer-Encoding: binary\r\n
\r\n'.$post.'\r\n--1BEF0A57BE110FD467A--\r\n';

Подробнее http://www.codenet.ru/webmast/php/HTTP-POST.php
_________________
Написание конвекторов, парсеров, интеграции нескольких сайтов (в личку)

Тематические поисковые системы Рунета: Танцевальная, программиста, поиск книг
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Отправить e-mail Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 20:34    Заголовок сообщения: Ответить с цитатой

madhamster писал(а):
Проблема современной молодёжи.

Весьма польщен.
madhamster писал(а):

Флаг аля аргумент FILE_BINARY для кого придумали?

Можно ли конкретный пример или сслыку на описание аргумента FILE_BINARY?
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 21:03    Заголовок сообщения: Ответить с цитатой

Веденин писал(а):
Есть два формата отправки POST запроса
1) application/x-www-form-urlencoded - отправка строки
2) multipart/form-data - отправка файлов

Данные два алгоритма используются для кодирования запросов на основе html-форм. Так как html-формы у меня нет, то Content-Type могу указать любой, тот, который мне нужно. В данном случае указываю image/jpeg.
Вопрос остался открытым.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
madhamster
Согнул ложку
Согнул ложку


Зарегистрирован: 09.10.2006
Сообщения: 902

432 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 21:22    Заголовок сообщения: Ответить с цитатой

Ну вот ты писал:

Цитата:
Проблема состоит в том, что при загрузке файла file_get_contents (как и другими командами) содержимое интерпретируется как строка, как сделать так чтобы оно интерпретировалось как binary.


Да пардон я сам молодой и не читаю до конца...

FILE_BINARY появился начиная с 6 версии пхп))

Так что тебе тогда подойдёт чтение с помощью fopen где в качестве 2 аргумента передашь rb

Код:


$fd = fopen($filename, 'rb');
$post = fread($fd, filesize($filename));
fclose($fd);

       $fp = fsockopen("$host",80);
       $headers = "POST /post.php HTTP/1.1\r\n"
               ."Host: $host\r\n"
             ."Content-type: image/jpeg\r\n"
             ."Content-length: ".strlen($post)."\r\n\r\n";
      fwrite($fp,$headers.$post);
      $resp='';
      while(!feof($fp)){$resp.=fread($fp,1024);}
      fclose($fp);

_________________
NextStage - live music competition
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 21:38    Заголовок сообщения: Ответить с цитатой

Сейчас попробовал еще раз fopen/fread - не работает.
fread тоже возвращает содержимое файла в виде бинарной строки (все-таки строка).
Вопрос как преобразовать сию строку к виду, годному для передачи по http.

Сутки пытаюсь понять, много чего перечитал, мозги кипят, а воз и ныне там.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 21:58    Заголовок сообщения: Ответить с цитатой

girafenok
что-то вроде urlencode()?
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 22:22    Заголовок сообщения: Ответить с цитатой

[LP]LordPro.teus
Не, не работает, rawurlencode() тоже не помогает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
[LP]LordPro.teus
Призрак Лорда
Призрак Лорда


Зарегистрирован: 26.07.2007
Сообщения: 5092

42282 Монеты

СообщениеДобавлено: Пн, 08 Дек, 2008 22:29    Заголовок сообщения: Ответить с цитатой

girafenok
а ручная замена превратно трактуемых символов?..
_________________

До выхода LiteDiary 0.3.0: парам-пам-пам-пам! Она уже здесь!
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Вт, 09 Дек, 2008 00:13    Заголовок сообщения: Ответить с цитатой

[LP]LordPro.teus
думаю, что лучше, чем интерпретатор php я с этим делом не справлюсь Very Happy
К тому же функция fwrite все равно проинтерпретирует выводимую информацию как строку.

В общем нашел еще одну функцию stream_copy_to_stream, однако и с ней не работает.
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
lazutov
while (1==1);
Последний герой


Зарегистрирован: 30.04.2007
Сообщения: 3840

111220 Монеты

СообщениеДобавлено: Вт, 09 Дек, 2008 06:51    Заголовок сообщения: Ответить с цитатой

girafenok
упаковать base64 (он вроде для binary) и послать. на принмающей стороне расшифровать.
_________________
сервис DNS | разные http, DNS и прочие утилиты
Вернуться к началу
Посмотреть профиль Отправить личное сообщение
girafenok
Два пингвиненка
Два пингвина


Зарегистрирован: 17.11.2007
Сообщения: 333

11827 Монеты

СообщениеДобавлено: Вт, 09 Дек, 2008 21:01    Заголовок сообщения: Ответить с цитатой

lazutov
К сожалению я не контролирую принимающую сторону. Это сервис с REST API.

В общем, похоже, что проблема либо в моих заголовках, либо на стороне сервиса.
file_get_contents работает корректно на бинарных данных.

Всем откликнувшимся - по 100 монеток за участие Very Happy
Вернуться к началу
Посмотреть профиль Отправить личное сообщение Посетить сайт автора
Показать сообщения:   
Начать новую тему   Ответить на тему    Список форумов EOMY.NET -> Программирование для WEB Часовой пояс: GMT
Страница 1 из 1

 


EOMY TOP 100 Rambler's Top100   Рейтинг@Mail.ru    



Powered by phpBB © 2001, 2005 phpBB Group


Рейтинг SIMPLETOP.NET