ANTICHAT

ANTICHAT (https://forum.antichat.io/index.php)
-   PHP (https://forum.antichat.io/forumdisplay.php?f=37)
-   -   Заливка фотки на сервак контакта PHP вопрос (https://forum.antichat.io/showthread.php?t=125882)

R1der23 18.06.2009 17:31

Заливка фотки на сервак контакта PHP вопрос
 
Привет. Столкнулся с проблемой автоматической заливки фотки на сервак. Вот следующий код..
Цитата:

$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($flo od[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

Цитата:

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

это уже ответ сервака вконтакте..

наш 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

Цитата:

Сообщение от R1der23
но ведь я в пример и привел тоже самое.. запрос абсолютно корректный.. можешь сам помотреть.. в том то и дело.. я не понимаю что не так сделал.. все ведь верно!!

Затем сервак возвращает 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

там через курл реально проще...



PHP код:

$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 код:

<?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

Цитата:

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

Отправил в ЛС .


Время: 11:02