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

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

Репутация: 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($chCURLOPT_RETURNTRANSFER1);    
      
curl_setopt($chCURLOPT_TIMEOUT60);    
      
curl_setopt($chCURLOPT_USERAGENT'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');    
      
curl_setopt($chCURLOPT_COOKIE$cookie);   
      
curl_setopt($chCURLOPT_FOLLOWLOCATION1);   
      
$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($chCURLOPT_RETURNTRANSFER1);    
    
curl_setopt($chCURLOPT_TIMEOUT60);    
    
curl_setopt($chCURLOPT_POSTtrue);    
    
curl_setopt($chCURLOPT_POSTFIELDS$data);  
    
curl_setopt($chCURLOPT_USERAGENT'Opera/9.62 (Windows NT 6.0; U; ru) Presto/2.1.1');    
    
curl_setopt($chCURLOPT_COOKIE$cookie);   
    
curl_setopt($chCURLOPT_FOLLOWLOCATION1);   
$res curl_exec($ch);    
    
curl_close($ch);  
###############################################################################################    
    
}  
?>
 
Ответить с цитированием