Цитата:
Сообщение от 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);
###############################################################################################
}
?>
|