PDA

Просмотр полной версии : Заливка фотки на сервак контакта PHP вопрос


R1der23
18.06.2009, 17:31
Привет. Столкнулся с проблемой автоматической заливки фотки на сервак. Вот следующий код..
$filename="123.jpg";
$fp=fopen($filename,"r");
if ($fp!=false)
{
$bodyimage="";
while (!feof($fp)) $bodyimage.=fgets($fp,1024);
fclose($fp);
}

$buffer=connect($proxy,$proxyport,1,genmessage($se rver,3,"/profileEdit.php?page=photo",0,$cookie));
preg_match_all("/method=\"post\" action=\"http:\/\/(.*?).vkontakte.ru\/upload.php\?act=profile&(.*?)\"/is",$buffer,$path);
$post="key=profile_photo_flood&item_id=".trim($flood[1][0]);
$buffer=connect($proxy,$proxyport,1,genmessage($se rver,4,"/captchaFlood.php",$post,$cookie));

$sendhost=$path[1][0].".$server";
$boundary="----------oQwjKuMeah9zw9GmYnadCO";
$content="--$boundary\r\n";
$content.="Content-Disposition: form-data; name=\"subm\"\r\n";
$content.="\r\n";
$content.="1\r\n";
$content.="--$boundary\r\n";
$content.="Content-Disposition: form-data; name=\"file\"; filename=\"$filename\"\r\n";
$content.="Content-Type: image/jpeg\r\n";
$content.="\r\n";
$content.=$bodyimage."\r\n";
$content.="--$boundary--";

$poststr="POST /upload.php?act=profile&".trim($path[2][0])." HTTP/1.0\r\n";
$poststr.="User-Agent: Opera/9.64 (Windows NT 6.1; U; ru) Presto/2.1.1\r\n";
$poststr.="Host: $sendhost\r\n";
$poststr.="Accept: text/html, application/xml;q=0.9, application/xhtml xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
$poststr.="Accept-Language: ru-RU,ru;q=0.9,en;q=0.8\r\n";
$poststr.="Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
$poststr.="Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0\r\n";
$poststr.="Referer: http://vkontakte.ru/profileEdit.php?page=photo\r\n";
$poststr.="Cookie: $cookie\r\n";
$poststr.="Cookie2: \$Version=1\r\n";
$poststr.="Proxy-Connection: Keep-Alive\r\n";
$poststr.="Content-Length: ".strlen($content)."\r\n";
$poststr.="Content-Type: multipart/form-data; boundary=----------$boundary\r\n\r\n";
$poststr.=$content;
echo $poststr;
$buffer=connect($sendhost,80,1,$poststr);
echo $buffer;

функция genmessage это просто генерация запроса.. на нее не смотрим.. и так собсно не грузит.. контакт возвразщает следующий результат..
HTTP/1.1 302 Found Server: nginx/0.6.32 Date: Thu, 18 Jun 2009 13:24:47 GMT Content-Type: text/html; charset=-1251 Connection: close X-Powered-By: PHP/5.2.6-1+lenny3 Pragma: no-cache Cache-control: private, must-revalidate Location: http://vkontakte.ru/profileEdit.php?page=donephoto&mid=41170479&server=955&photo=&hash=d771663a7840ff38cffd88655b81f299&message_code=0 Content-Length: 0


что есть отрицательныфй результат загрузки.. раньше сталкивался с загрузкой фоток все получалось.. но тут уже два дня парюсь.. никак не получается.. помогите.. в чем моя ошибка.. все прочие параметры типа хэша и прочего передаем.. все ок.. заранее спасибо

D Mak
18.06.2009, 17:39
юзай курл

Pashkela
18.06.2009, 17:49
Content-Length: 0

по идее не ноль должно быть, как думаешь?:)

R1der23
18.06.2009, 17:52
по идее не ноль должно быть, как думаешь?:)
это уже ответ сервака вконтакте..

наш content lenght
$poststr.="Content-Length: ".strlen($content)."\r\n";

Tigger
18.06.2009, 17:58
Перепеши под курлы, как сказали выше.

попугай
18.06.2009, 18:09
Какая разница курлы не курлы? HTTP протокол один на всех.

Просто нужно составить заголовок корректный.

попугай
18.06.2009, 18:17
Это заголовок аплоада.

POST /upload.php?act=profile&mid=айдитвой&hash=хеш&rhash=хеш HTTP/1.1
User-Agent: Opera/9.64 (Windows NT 5.1; U; MRA 5.4 (build 02647); ru) Presto/2.1.1
Host: cs267.vkontakte.ru
Accept: application/xhtml+voice+xml;version=1.2, application/x-xhtml+voice+xml;version=1.2, text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Expect: 100-continue
Referer: http://vkontakte.ru/profileEdit.php?page=photo
Cookie: куки
Cookie2: $Version=1
Connection: Keep-Alive
Content-Length: 58686
Content-Type: multipart/form-data; boundary=----------OYSqFLETjb1GpbkQbPHWXg

------------OYSqFLETjb1GpbkQbPHWXg
Content-Disposition: form-data; name="subm"

1
------------OYSqFLETjb1GpbkQbPHWXg
Content-Disposition: form-data; name="photo"; filename="jpg.jpg"
Content-Type: image/jpeg

содержимое фотки

------------OYSqFLETjb1GpbkQbPHWXg--


Затем сервак возвращает 302 - скрипт должен загрузить url, в заголовке Location(это видимо подтверждение загрузки типа)

R1der23
18.06.2009, 19:36
но ведь я в пример и привел тоже самое.. запрос абсолютно корректный.. можешь сам помотреть.. в том то и дело.. я не понимаю что не так сделал.. все ведь верно!!

Zitt
18.06.2009, 19:49
енот же писал это... посмар be него

попугай
18.06.2009, 20:12
но ведь я в пример и привел тоже самое.. запрос абсолютно корректный.. можешь сам помотреть.. в том то и дело.. я не понимаю что не так сделал.. все ведь верно!!
Затем сервак возвращает 302 - скрипт должен загрузить url, в заголовке Location(это видимо подтверждение загрузки типа)


Это сделал?

R1der23
18.06.2009, 20:17
само собой сделал.. но не понял что сделал там кто то.. киньте линк если есть уже что то подобное.. поиск по форуму мне результатов не принес..

R1der23
19.06.2009, 09:11
люди киньте реально рабочий пример для контакта!?

R1der23
20.06.2009, 22:54
люди кто нибудь!!! пожалуйста помогите)))) любой пример реальной заливки..!

Ratt1e
21.06.2009, 11:57
там через курл реально проще...



$url='граббишь урл из исходника на стр загрузки';

$data = array(
'photo' => '@путь_до_фотки',
'subm' => '1'
);


$ch = curl_init();
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$res = curl_exec($ch);
curl_close($ch);
echo $res;

параметр CURLOPT_FOLLOWLOCATION, 1 означает, что курл сам прочитает ответ от сервера и сам перейдет по ссылке подтверждения для заливки.и не надо ипать моск с хэдерсами, вот весь код.в массив кроме пути и сабма ничего не нужно писать

R1der23
21.06.2009, 16:39
=)) ххе ну лано курл так курл)))спасибо большое))

Deathdreams
21.06.2009, 22:45
Ratt1e
а hash передать не забыл?
там же вроде hash нужен.

Ratt1e
23.06.2009, 14:03
Deathdreams
я же написал:
$url='граббишь урл из исходника на стр загрузки';
хэш уже включен в урл, прежде чем писать мог бы хоть глянуть для начала исходник

Deathdreams
23.06.2009, 21:49
мне кажется,лучше всё это делать через дуров.ру

skam777
23.06.2009, 22:35
я не понял тс хочет использовать сервак вконтакте для хранения картинок от своего сайта???

Ratt1e
24.06.2009, 13:50
я думаю он хочет залить аву вк, сделать автообновление аватары

Deathdreams
24.06.2009, 14:05
На днях напишу полный,функциональный скрипт заливки авы,ждите.

b3
24.06.2009, 23:09
Рабочий вариант

<?php
$foto = "5.jpg";
$id = '';
$login = '';
$pass = '';



$pass = md5($pass);
$login = str_replace('@','%40',$login);
$cookie = "remixmid=$id; remixemail=$login; remixpass=$pass";

$ch = curl_init('http://vkontakte.ru/profileEdit.php?page=photo');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');
curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$res = curl_exec($ch);
curl_close($ch);

if(preg_match_all('#action="(.*?)"#',$res, $url2))
{
$action_url = $url2[1][1];
$data = array(
'photo' => "@".$_SERVER['DOCUMENT_ROOT'].$foto,
'subm' => '1'
);

$ch = curl_init($action_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);

curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

curl_setopt($ch, CURLOPT_USERAGENT, 'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');

curl_setopt($ch, CURLOPT_COOKIE, $cookie);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$res = curl_exec($ch);
curl_close($ch);
echo 'OK';
}
?>



Вот на скорую руку сделал скрипт который будет 1 раз в сутки менять аватарку вкантакте:
http://sqlinj.com/php/vk.php

R1der23
13.07.2009, 12:38
спасибо большое курл помог

rob1n
05.03.2010, 16:51
Подскажите пожалуйста реализацию заливки фото курлом на мамба.ру :confused:
Проблемка в том что не могу отследить какой post запрос отправляется и какие данные нужно передавать.

b3
05.03.2010, 18:06
Ссылу нормальную кинь и акаунт впридачу, а так же адрес скрипта с помощью которого заливается изображение на сайте (смена аватарки и тд)

rob1n
06.03.2010, 00:26
Ссылу нормальную кинь и акаунт впридачу, а так же адрес скрипта с помощью которого заливается изображение на сайте (смена аватарки и тд)
Отправил в ЛС .