Загрузка картинки на сервер ВКонтакте методом POST

Евгений Белов Евгений Белов

Я пишу вот такой код загрузки:
if (isset($_POST['vkServer'].
{
$vkServer = $_POST['vkServer'];

$query = explode('/', $vkServer);

$hostname = $query[2];
$path = $query[3];

// Устанавливаем соединение с сервером $hostname
$fp = fsockopen($hostname, 80, $errno, $errstr, 30);

// Проверяем успешность установки соединения
if (!$fp) die($errstr.' ('.$errno.')');

// Содержимое файла
$file = '1.png';
$f = fopen($file, 'r');
$cоntent = fread($f, filesize($file. ;
fclose($f);

// Данные HTTP-запроса
$data = 'photo='.$content;

// Заголовок HTTP-запроса
$headers = 'POST '.$path. " HTTP/1.1\r\n";
$headers.= 'Host: www.'.$hostname. "\r\n";
$headers.= "Content-type: image/png\r\n";
$headers.= 'Content-Length: '.strlen($data). "\r\n\r\n";

// Отправляем HTTP-запрос серверу second.com
fwrite($fp, $headers.$data);

// Получаем ответ
$result = '';
while ( ! Feof($fp. $result.= fgets($fp, 1024);
// Закрываем соединение
fclose($fp);

echo $result;

Возвращается ошибка 400 о плохом запросе.

Заголовки получаются такими:
POST upload.php?act=do_add_posted&mid=133230885&hash=a705adb2e1425df45af0bbdf012daf18&rhash=c07b23186fca031b5b6eef24122b6dde&swfupload=1 HTTP/1.1
Host: www.cs888.vkontakte.ru
Content-type: image/png
Content-Length: 6731

В документации сказано по этому пункту:
Приложение формирует POST-запрос на полученный адрес.
Запрос должен содержать поле photo, которое содержит файл с изображением (JPG, PNG, BMP или GIF).

Ну и JS пока такой, если будет полезно:
VK.api("wall.getPhotoUploadServer", function(data) {

// Получаем адрес сервера, куда посылать картинку:
server = data.response.upload_url;

// Отправляем POST-запрос на добавление:
$.post("/ajax/upload", {vkServer: server}, function(json) {
alert(json);
});

});

Помогите написать POST запрос, чтобы он не выдавал ошибку 400

Daniil Daniil

Отправка Конфига
---
OPTIONS /upload.php?act=profile_photo&mid=xxxxxxxxxx&hash=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&rhash=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&photo_hash=xxxxxxxxx&vk=&upldr=1&ajx=1 HTTP/1.1
Host cs11212.vkontakte.ru
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
Accept text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-ru, ru;q=0.8, en-us;q=0.5, en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset windows-1251, utf-8;q=0.7,*;q=0.7
Connection keep-alive
Origin
Access-Control-Request-Method POST
Pragma no-cache
Cache-Control no-cache
---

Заливка
---
POST /upload.php?act=profile_photo&mid=xxxxxxxxxx&hash=xxxxxxxxxxxxxxxxxxxxxxxxxxxx&rhash=xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx&photo_hash=xxxxxxxxx&vk=&upldr=1&ajx=1 HTTP/1.1
Host cs11212.vkontakte.ru
User-Agent Mozilla/5.0 (Windows NT 5.1; rv:6.0.1) Gecko/20100101 Firefox/6.0.1
Accept text/html, application/xhtml+xml, application/xml;q=0.9,*/*;q=0.8
Accept-Language ru-ru, ru;q=0.8, en-us;q=0.5, en;q=0.3
Accept-Encoding gzip, deflate
Accept-Charset windows-1251, utf-8;q=0.7,*;q=0.7
Connection keep-alive
Referer
Content-Length 13135
Content-Type multipart/form-data; boundary---122872775310383
Origin
Pragma no-cache
Cache-Control no-cache

POST
photo multipart/form-data
---

Katze von Ulthar Katze von Ulthar

Что-т мне подсказывает, что так POST не отправляется. Сервер может огорчать Content-type: обычно используются application/x-www-form-urlencoded и multipart/form-data (второй, наверное, будет предпочтительнее тут, хотя хз)

Добавить комментарий | Похожие обсуждения

Вопросы и ответы по Вконтакте
Вопросы и ответы

Популярные вопросы и ответы о социальной сети www.vkontakte.ru (vk.com)