Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: filesonic.com remote upload на php
Форумы портала PHP.SU » » HTTP и PHP » filesonic.com remote upload на php

Страниц (1): [1]
 

1. jack7277 - 14 Августа, 2011 - 20:46:39 - перейти к сообщению
Не работает следующий код, дело доходит до пробела в имени файла и дальше обрезка. Если урл вставить вручную в форму с заменой пробела на %20 по урлу http://www[dot]filesonic[dot]com/remote-upload
то файл качается нормально, а если через http post запрос, то вместо %20 почему-то пробел пролезает и стоп.
Допустим имя файла "123 123.avi" то передается только "123", всё что после пробела отрезается.
Как обмануть и почему через браузер берется корректно.

код:
$user_agent = 'Mozilla/5.0 (Windows NT 6.1; rv:5.0) Gecko/20100101 Firefox/5.0';
$In = 'Upload'; //Кнопка входа, название
$redirect = '/remote-upload';
// $url_fname содержит имя файла, допустим "123 123.avi"
$url_fname = rawurlencode($url_fname); //пробовал urlencode, и строку ниже
//$url_fname = str_replace (" ", "%20", $url_fname);
// ссылка качать с удаленного фтп
$links = 'ftp://ftpname:ftppass@myhost.ru/'.$url_fname;
//$links = urlencode ($links2); // пробовал и так
//$links = strtr ($links, " ", "\x20"); // и так

// в пост запросе передаю редирект, линкс и кнопку отправить
$tmp_post = "redirect=$redirect&links=$links&controls[submit]=$In";

// куки получили раньше
$user_cookie_file = $_SERVER['DOCUMENT_ROOT'].'/cookies.txt';

$ch = curl_init();
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_URL, 'http://www.filesonic.com/remote-upload');
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_TIMEOUT, 10);
curl_setopt($ch, CURLOPT_USERAGENT, $user_agent);
curl_setopt($ch, CURLOPT_COOKIEFILE, $user_cookie_file); //Подставляем куки
curl_setopt($ch, CURLOPT_COOKIEJAR, $user_cookie_file); //Подставляем куки
curl_setopt($tuCurl, CURLOPT_HTTPHEADER, 'Content-Type: application/x-www-form-urlencoded');

curl_setopt($ch, CURLOPT_POSTFIELDS, $tmp_post);
$answer = curl_exec($ch);
curl_close($ch);
2. LIME - 14 Августа, 2011 - 20:54:27 - перейти к сообщению
http://php.su/functions/?urlencode
(Добавление)
а вообще вам надо HTTP почитать
лишних пробелов в протоколе быть не может, каждый на счету ))
браузер на + заменяет но можно и %20
3. jack7277 - 15 Августа, 2011 - 07:31:44 - перейти к сообщению
вместо $url_fname = rawurlencode($url_fname);
сделал $url_fname = urlencode($url_fname);

и вместо
$tmp_post = "redirect=$redirect&links=$links&controls[submit]=$In";

сделал
$post_data = array('redirect'=>$redirect, 'links'=>$links, 'controls[submit]'=> $in);
$tmp_post = http_build_query($post_data);

и всё заработало.

 

Powered by ExBB FM 1.0 RC1