curl -> загрузка файла

Статус
В этой теме нельзя размещать новые ответы.
Поделюсь своей скриптягой:
PHP:
<?php
function up_c($url)
{
$url='http://'.$url;
	$ch = curl_init($url); 
$e=explode('/',$url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        curl_setopt($ch, CURLOPT_HEADER, false); 
        curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.0.3) Gecko/2008092417'); 
        $chs=curl_exec($ch);
        if(@file_put_contents($e[count($e)-1],$ch))
{
        @chmod($e[count($e)-1],0777);
return '<a href="'.$e[count($e)-1].'">скачать</a>';
}
}
function up_s($url)
{
$usf='http://'.$url;
	$e=explode('/',$usf);
	$host=trim($e[2]);
	$files=str_replace("http://".$host,'',$usf);
	$file=$e[count($e)-1];
$fp=fsockopen($host, 80, $errno, $errstr, 30);
if($fp)
	{
fputs($fp,"GET $files HTTP/1.0\nHOST: $host\n\n");
while(fgets($fp,2048)!="\r\n" && !feof($fp));
unset($buff);
while(!feof($fp)) @$buff.=fread($fp,2048);
fclose($fp);
flush();
$f=@fopen($file,"wb+");
@fwrite($f,$buff,strlen($buff));
@fclose($f);
@chmod(@$file,0777);
return '<a href="'.$file.'">скачать</a>';
}
}
if( (isset($urs)) and ($urs!='') )
{
if($t=='c')
{
if (!extension_loaded('curl'))
	{
	echo 'Библиотека Curl отключена, будет использоваться sockets <br>';
	if(!extension_loaded('sockets'))
		{
		echo 'увы и библиотека sockets отключена(';
		}
		else
		{
			echo up_s($urs);
		}
	}
	else
	{
echo up_c($urs);
	}
}
else
{
if (!extension_loaded('sockets'))
	{
	echo 'Библиотека Curl отключена, будет использоваться curl <br>';
	if(!extension_loaded('curl'))
		{
		echo 'увы и библиотека curl отключена(';
		}
		else
		{
			echo up_c($urs);
		}
	}
	else
	{
echo up_s($urs);
	}
}
}
echo '<form action="'.$_SERVER['PHP_SELF'].'" method="POST">Url на файл без http://:<input type="text" name="urs"><br>Протокол:<select  name="t"><option value="c">Curl</option><option value="s">Sockets</option></select><br><input type="submit" value="скачать"></form>';
?>
 
Подскажите как в таком случе будет выглядить запрос
HTML:
<form enctype="multipart/form-data" action="/photo1.php?id=99" method="post">
<input type="hidden" name="MAX_FILE_SIZE" value="3145728">
<input name="userfile" type="file">
<input type="submit" value="Загрузить">
с кодом разобрался получилось что то вроде
PHP:
curl_setopt($curl, CURLOPT_POST, TRUE);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);
$data = array( 'MAX_FILE_SIZE'=>'3145728','userfile' => '@/C:\foto.png');
Но теперь сайт говорит "неподдерживаемый тип файла"
посмотрел по сниферу если через браузер загружать получается
Код:
Content-Disposition: form-data; name="MAX_FILE_SIZE"
3145728
------------p4mzFXowKIe77OZI8pZJQ7
Content-Disposition: form-data; name="userfile"; filename="foto.png"
Content-Type: image/jpeg
а если курлом то
Код:
Content-Disposition: form-data; name="MAX_FILE_SIZE"
3145728
------------p4mzFXowKIe77OZI8pZJQ7
Content-Disposition: form-data; name="userfile"; filename="С:\foto.png"
Content-Type: image/jpeg
тоесть в первом случае filename="foto.png" а во втором filename="С:\foto.png" думаю здесь какраз сайт и ругается как это можно попробовать обойти ?!
 
Сайт скорее всего ругается на тип файла, а не на его имя. Недавно сталкивался с похожей проблемой, мне помогло явное указание курлу content-type.
Бразуер точно выдаёт
Код:
Content-Disposition: form-data; name="userfile"; filename="foto.png"
Content-Type: [COLOR="Red"]image/jpeg[/COLOR]
?
Попробуй на всякий случай так:
PHP:
$data = array( 'MAX_FILE_SIZE'=>'3145728','userfile' => '@/C:\foto.png;type=image/png');
 
  • Нравится
Реакции: mlol
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху