Master-X
Регистрация
|
Вход
Форум
|
Новости
|
Статьи
Главная
»
Форум
»
Программинг, Скрипты, Софт, Сервисы
»
Тема:
Файл аплоад - boundary. Need help! (php)
Новая тема
Ответить
цитата
05/04/07 в 15:48
Lamagro
Сабдж собственно.
Пытаюсь отправить файлы пхп скриптом. Неполучается.
Может кто чего подскажет?
Вот что отправляет браузер:
Код:
POST /cgi-bin/user_uploads.cgi HTTP/1.1
User-Agent: Opera/9.10 (Windows NT 5.1; U; ru)
Host: host.com
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Language: ru,en;q=0.9
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: gzip, deflate
Referer:
http://host.com/cgi-bin/user_uploads.cgi
Cookie: hfuser=tabl||checked|||
Cookie2: $Version=1
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 21270
Content-Type: multipart/form-data; boundary=----------GcH7GgPSnXRcsyciRUqJFA
Connection: keep-alive
Posting 21270 bytes...
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="account"
tabl
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="session"
YsEzUbBRdW5QNWH
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="dir"
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="file1"; filename="file1.html"
Content-Type: text/html
<html> бла бла бла бла тело файла </html>
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="file2"; filename=""
.......................
.......................
.......................
.......................
------------GcH7GgPSnXRcsyciRUqJFA
Content-Disposition: form-data; name="upload"
Upload these files
------------GcH7GgPSnXRcsyciRUqJFA--
а вот что отправляет мой скрипт
Код:
POST /cgi-bin/user_uploads.cgi HTTP/1.1
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Encoding: deflate
TE: deflate
Accept-Language: en-us
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Cookie: hfuser=tabl||checked|||
Cookie2: $Version=1
Content-Type: multipart/form-data; boundary=------------dYoBnRd189g2BFufzLmOdjSh
Connection: Keep-Alive
Host: host.com
Referer:
http://host.com/cgi-bin/user_uploads.cgi
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Content-length: 143489
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="account"
tabl
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="session"
xvfgNfjkTC1exxA
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="dir"
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="file1"; filename="file1.html"
Content-Type: text/html
<html> бла бла бла бла тело файла </html>
------------dYoBnRd189g2BFufzLmOdjSh
.......................
.......................
.......................
.......................
Content-Disposition: form-data; name="upload"
Upload these files
------------dYoBnRd189g2BFufzLmOdjSh--
Все одинаково почти - невижу я через сниффер ничего такого чего небыло бы у меня.
Может я просто в шары уже долблюсь? И не вижу очевидного.
Или просто по незнанию делаю где то грубую ошибку?
p.s. соответственно в первом случае заливка проходит нормально
во втором хрен
цитата
05/04/07 в 16:39
xreload
Что значит "пытаюсь отправить" ?
Куда отправить на сервер,клиенту?
Показывай скрипт.
p.s.
50% ответа - это правильно заданный вопрос...
цитата
05/04/07 в 17:07
Lamagro
POST запросом отправить на сервер...
Скрипт самый обычный, PostData - это тот заголовок что раньше запостил...
Код:
$out = "POST ".$Path." HTTP/1.1\r\n";
$out .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\r\n";
$out .= "Accept-Encoding: deflate\r\n";
$out .= "TE: deflate\r\n";
$out .= "Accept-Language: en-us\r\n";
$out .= "Cache-Control: no-cache\r\n";
$out .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\r\n";
if ($Cookie) {$out .= "Cookie: ".$Cookie."\r\n";}
if ($Cookie2) {$out .= "Cookie2: ".$Cookie2."\r\n";}
$out .= "Content-Type: multipart/form-data; boundary=------------".$boundary."\r\n";
$out .= "Connection: Keep-Alive \r\n";
//$out .= "Content-type: application/x-www-form-urlencoded\r\n";
$out .= "Host: ".$info['host']."\r\n";
if ($Referer) {$out .= "Referer: $PostUrl\r\n";}
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\r\n";
$out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData;
@$socket = fsockopen($info['host'], $info['port'], $errno, $errstr,10);
$Page = "";
if ($errno !== 0 | !$socket)
{echo "Connect failed! ".$url." ".$errno."\n"; }
else
{
fputs ($socket, $out);
while (!feof($socket))
{
$Page.=fgets($socket);
}
fclose($socket);
}
цитата
05/04/07 в 18:51
Cibtor
На первый взляд, у тебя отсутствует еще один перевод строки после Content-length
цитата
06/04/07 в 02:04
xreload
+1
Lamagro:
заголовок запроса от тела запроса отделяется
2-мя
переводами каретки.
цитата
06/04/07 в 05:06
Lamagro
Код:
$out .= "Content-length: ".strlen($PostData).
"\r\n\r\n".
$PostData;
этого разве недостаточно?
если бы неправильно было я так понимаю - простая передача полей точно так же бы не работала - все работает - кроме боундари
цитата
06/04/07 в 05:20
bleed
Код:
$out .= "Content-length: ".strlen($PostData)."
\r
\n
\r
\n".$PostData;
а зачем эти символы? всегда использовалось просто \n\n
цитата
06/04/07 в 06:03
Lamagro
это я так понимаю что бы под виндой тоже работало...
отднако вопрос остался
цитата
06/04/07 в 09:38
bleed
первый раз такое слышу...
так ты пробывал так \n\n или не пробывал?
вообще к чему приводит работа скрипта? ченить из данных приходит вообще?
цитата
06/04/07 в 09:51
bleed
погоди давай попорядку
во первых без \r
Код:
$out = "POST ".$Path." HTTP/1.1\n";
$out .= "Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1\n";
$out .= "Accept-Encoding: deflate\n";
$out .= "TE: deflate\n";
$out .= "Accept-Language: en-us\n";
$out .= "Cache-Control: no-cache\n";
$out .= "Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1\n";
if ($Cookie) {$out .= "Cookie: ".$Cookie."\n";}
if ($Cookie2) {$out .= "Cookie2: ".$Cookie2."\n";}
$out .= "Content-Type: multipart/form-data; boundary=------------".$boundary."\n";
$out .= "Connection: Keep-Alive \n";
//$out .= "Content-type: application/x-www-form-urlencoded\n";
$out .= "Host: ".$info['host']."\n";
if ($Referer) {$out .= "Referer: $PostUrl\n";}
$out .= "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)\n";
$out .= "Content-length: ".strlen($PostData)."\n\n".$PostData;
@$socket = fsockopen($info['host'], $info['port'], $errno, $errstr,10);
$Page = "";
if ($errno !== 0 | !$socket)
{echo "Connect failed! ".$url." ".$errno."\n"; }
else
{
fputs ($socket, $out);
while (!feof($socket))
{
$Page.=fgets($socket);
}
fclose($socket);
}
во вторых что всетаки $PostData???
Цитата:
PostData - это тот заголовок что раньше запостил...
из твоих слов я понимаю так что $PostData это:
Код:
POST /cgi-bin/user_uploads.cgi HTTP/1.1
Accept: text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1
Accept-Encoding: deflate
TE: deflate
Accept-Language: en-us
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Cookie: hfuser=tabl||checked|||
Cookie2: $Version=1
Content-Type: multipart/form-data; boundary=------------dYoBnRd189g2BFufzLmOdjSh
Connection: Keep-Alive
Host: host.com
Referer:
http://host.com/cgi-bin/user_uploads.cgi
User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)
Content-length: 143489
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="account"
tabl
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="session"
xvfgNfjkTC1exxA
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="dir"
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="file1"; filename="file1.html"
Content-Type: text/html
<html> бла бла бла бла тело файла </html>
------------dYoBnRd189g2BFufzLmOdjSh
.......................
.......................
.......................
.......................
Content-Disposition: form-data; name="upload"
Upload these files
------------dYoBnRd189g2BFufzLmOdjSh--
ну тогда неверно... т.к. ты передж этим уже вывел заголовок
цитата
06/04/07 в 10:26
Lamagro
я накидал функцию и использовал ее когда надо было запостить.
Все прекрасно работало - проверено не раз
Счас нужно передать данные через мультипарт
Я так понимаю - координально в отправляемых заголовках должен измениться только Content-Type:
Вот так формируется $PostData
Код:
$boundary = generate_password(22);
$PostData = "------------".$boundary." \n";
$PostData .= "Content-Disposition: form-data; name=\"account\"\n\n";
$PostData .= trim($username)."\n";
$PostData .= "------------".$boundary." \n";
$PostData .= "Content-Disposition: form-data; name=\"session\"\n\n";
$PostData .= $SessionID."\n";
$PostData .= "------------".$boundary." \n";
$PostData .= "Content-Disposition: form-data; name=\"dir\"\n\n";
$PostData .= "\n";
$PostData .= "------------".$boundary." \n";
// $a - массив названий файлов
foreach ($a as $k => $v)
{
$kkk = $k+1;
$PostData .= "Content-Disposition: form-data; name=\"file".$kkk."\"; filename=\"".$v."\"\n";
$PostData .= "Content-Type: text/html\n\n"; //Content-type файла
$PostData .= file_get_contents("./".$Dir."/".$v)."\r\n"; //Получаем содержимое файла
$PostData .= "------------".$boundary."\n";
}
$PostData .= "Content-Disposition: form-data; name=\"upload\"\n";
$PostData .= "\n";
$PostData .= " Upload these files \n";
$PostData .= "------------".$boundary."-- \n";
вот что $PostData содержит после
Код:
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="account"
tabl
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="session"
xvfgNfjkTC1exxA
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="dir"
------------dYoBnRd189g2BFufzLmOdjSh
Content-Disposition: form-data; name="file1"; filename="file1.html"
Content-Type: text/html
<html> бла бла бла бла тело файла </html>
------------dYoBnRd189g2BFufzLmOdjSh
.......................
.......................
.......................
.......................
Content-Disposition: form-data; name="upload"
Upload these files
------------dYoBnRd189g2BFufzLmOdjSh--
[/code]
без \r тоже пробывал - пофиг
Последний раз редактировалось: Lamagro (
09/04/07 в 11:13
), всего редактировалось 1 раз
цитата
06/04/07 в 10:28
Lamagro
так что все передается как надо - один в один как браузер (ну почти
) с одним лишь отличием - файлы незагружаются
цитата
06/04/07 в 11:46
xreload
bleed писал:
Код:
$out .= "Content-length: ".strlen($PostData)."
\r
\n
\r
\n".$PostData;
а зачем эти символы? всегда использовалось просто \n\n
для совместимости.
цитата
06/04/07 в 11:54
bleed
почитал про http, да ты был прав \r\n реомендуют... хотя раньше я писал на perl и никогда такого не видел нигде.
как я понял у тебя все параметры приходять коректно, т.е. скриптом ты их пролучаешь и последний параметр name="upload" передается и обробатывается нормально, так? только массив $_FILES пустой? если так тоя сдаюсь
цитата
06/04/07 в 12:59
Lamagro
еех - яб тож сдался - немогу
Нашел какую-то драную гэсту - попробывать - может получится отследить проблему - в ней просто передается сообщение, но отправка идет через мультипарт - и хрен даже туда незапостилось
Хотя все точно так же полностью совпадает - сообщения нет.
пойду еще где нибудь поспрашаю...
цитата
06/04/07 в 13:51
xreload
Ты сделал то что я написал тебе выше?
цитата
06/04/07 в 14:36
Lamagro
xreload писал:
Lamagro:
заголовок запроса от тела запроса отделяется
2-мя
переводами каретки.
это?
дык там же и так два перевода каретки - раз нет?
Код:
$out .= "Content-length: ".strlen($PostData)."
\r\n\r\n
".$PostData;
цитата
09/04/07 в 09:42
Lamagro
проехали
цитата
09/04/07 в 11:00
Heavy
сразу скажу - не разбирался глубоко в вашем коде - может еще где лаги есть (если быстро писать, то с боундари легко напутать)... но имхо - вот так не стоило...
Код:
$PostData .= file_get_contents("./".$Dir."/".$v)."\r\n"; //Получаем содержимое файла
я например при отправке атачей в писмах - использую следующее:
тип контента
Код:
"Content-Transfer-Encoding: base64\n";
а содержимое файла -
Код:
= chunk_split(base64_encode(file_get_contents($attfile)));
на прямую (без коверканья base64) файл передавать можно - но полюбому необходимо какие-то манипуляции с ним произвести.
цитата
09/04/07 в 11:10
Lamagro
Всем присутствовавшим спасибо. Всех оценил
Вопрос решен!
Подвело невнимание к мелочам.
Нужно вот так:
Код:
$boundary = "------------".generate_password(22);
$PostData .= "--".$boundary.\n;
$PostData .= "Content-Disposition: form-data; name=\"username\"".\n\n;
$PostData .= trim($username).\n;
$PostData .= "--".$boundary.\n\n;
ну и так далее...
цитата
09/04/07 в 11:11
Lamagro
Heavy писал:
на прямую (без коверканья base64) файл передавать можно - но полюбому необходимо какие-то манипуляции с ним произвести.
кстати файл передался просто так:
Код:
$PostData .= file_get_contents("./".$Dir."/".$v).DCRLF;
так что вполне возможно работать и без преобразования .
Новая тема
Ответить
Эта страница в полной версии