Показать сообщение отдельно

  #6  
Старый 26.11.2009, 15:35
b3
Постоянный
Регистрация: 05.12.2004
Сообщений: 647
С нами: 11278406

Репутация: 818


По умолчанию

Цитата:
Сообщение от slva2000  
Уф, ну и не разбериха с этим курлом... Нашёл две детали (только с отладочными скриптами):

1. CURLOPT_POST должна идти обязательно перед CURLOPT_POSTFIELDS (иначе не принимает файл)
2. Заголовки я формировал для своей функции классические:

PHP код:
$this->headers[] = 'Accept: image/gif, image/x-bitmap, image/jpeg, image/pjpeg'; 
$this->headers[] = 'Connection: Keep-Alive'; 
$this->headers[] = 'Content-type: application/x-www-form-urlencoded;charset=UTF-8'; 
$this->user_agent = 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 1.0.3705; .NET CLR 1.1.4322; Media Center PC 4.0)'; 
С ними отправить файл не удавалось. Что ж, решил скопировать заголовки со снифера (реальный пост на сайте):

PHP код:
$head[] = "Content-Type: image/gif";

$head[] = "User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10";
$head[] = "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
$head[] = "Accept-Language: ru,en-us;q=0.7,en;q=0.3";
$head[] = "Accept-Encoding: gzip,deflate";
$head[] = "Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7";
$head[] = "Keep-Alive: 300";
$head[] = "Connection: keep-alive";
$head[] = "Referer: http:/xxx.ru/";
$head[] = "Content-Type: multipart/form-data"; 
Тоже не принимал такие. Удалил CURLOPT_HTTPHEADER с функции, всё заработало. Файл был принят сервером.
В голове не осталось ничего полезного :wacko
Объясни одну вещь, нафига слать все эти заголовки если ты используеш cURL ? Разве не для этого был создан cURL, что б те кто поленился изучать протоколы мог юзать Константы?

Вот пример загрузки изображения, когда-то давно писал, возможно код не очень красивый но понятен:

PHP код:
<?php  
/***********************************************************************************************************************  
*    Скрипт предназначен для автоматической смены аватарки на сайте vkontakte.ru. Замена аватарки происходит 1 раз в 24 часа.  
*    Имена аватарок:  
*    ponedelnik,  
*    vtornik,  
*    sreda,  
*    chetverg,  
*    pjatniza,  
*    subbota,  
*    woskresenje  
*    Формат файлов .png  
*    Запускать скрипт можно с сайта CronJob.ru рекомендую ставить промежуток 12 часов. Запуск производится по ссылке:  
*    http://www.example.com/SCRIPT_FILENAME.php?start  
************************************************************************************************************************/  
if(!@function_exists(curl_init))    
{    
    echo 
'<center><b>cURL not Supported</b></center><br>';    
    exit;    
}  
###  
if(file_exists('ponedelnik.png') && file_exists('vtornik.png') && file_exists('sreda.png') && file_exists('chetverg.png') && file_exists('pjatniza.png') && file_exists('subbota.png') && file_exists('woskresenje.png'))  
{  
    echo 
'<a href="?start">START</a>';  
}  
else  
{  
echo 
'<b>Нехватает файлов изображений</b>';  
###  
}  
if(!isset(
$_GET['start']))  
{  
    exit;  
}  
###########################################  
###########################################  
##############[CONFIG]#####################  
$id = '123';                          ###    <=== Your ID  
$login = '123@rambler.ru';      ###    <=== Your email for login  
$pass = '123';                     ###    <=== Your password  
###########################################  
###########################################  
$pass = md5($pass);  
$login = str_replace('@','%40',$login);  
$cookie = "remixmid=$id; remixemail=$login; remixpass=$pass";  
###############################################################################################  
$date =  date('w');  
$arr = array(  
'1' => 'ponedelnik',  
'2' => 'vtornik',  
'3' => 'sreda',  
'4' => 'chetverg',  
'5' => 'pjatniza',  
'6' => 'subbota',  
'0' => 'woskresenje'  
);  
$foto = $arr[$date].'.png';  
###############################################################################################  
$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);  
###############################################################################################    
    
}  
?>
 
Ответить с цитированием