SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 05/04/07 в 15:48 |
Сабдж собственно.
Пытаюсь отправить файлы пхп скриптом. Неполучается.
Может кто чего подскажет?
Вот что отправляет браузер:
Код: | 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. соответственно в первом случае заливка проходит нормально
во втором хрен
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 05/04/07 в 16:39 |
Что значит "пытаюсь отправить" ?
Куда отправить на сервер,клиенту?
Показывай скрипт.
p.s.
50% ответа - это правильно заданный вопрос...
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 05/04/07 в 17:07 |
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);
}
|
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 26.02.03
Сообщения: 2366
Рейтинг: 987
|
Добавлено: 05/04/07 в 18:51 |
На первый взляд, у тебя отсутствует еще один перевод строки после Content-length
|
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 06/04/07 в 02:04 |
+1
Lamagro:заголовок запроса от тела запроса отделяется 2-мя переводами каретки.
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 05:06 |
Код: | $out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData; |
этого разве недостаточно?
если бы неправильно было я так понимаю - простая передача полей точно так же бы не работала - все работает - кроме боундари
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 19.02.03
Сообщения: 1284
Рейтинг: 354
|
Добавлено: 06/04/07 в 05:20 |
Код: | $out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData; |
а зачем эти символы? всегда использовалось просто \n\n
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 06:03 |
это я так понимаю что бы под виндой тоже работало...
отднако вопрос остался
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 19.02.03
Сообщения: 1284
Рейтинг: 354
|
Добавлено: 06/04/07 в 09:38 |
первый раз такое слышу...
так ты пробывал так \n\n или не пробывал?
вообще к чему приводит работа скрипта? ченить из данных приходит вообще?
|
|
|
|
С нами с 19.02.03
Сообщения: 1284
Рейтинг: 354
|
Добавлено: 06/04/07 в 09:51 |
погоди давай попорядку
во первых без \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-- |
ну тогда неверно... т.к. ты передж этим уже вывел заголовок
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 10:26 |
я накидал функцию и использовал ее когда надо было запостить.
Все прекрасно работало - проверено не раз
Счас нужно передать данные через мультипарт
Я так понимаю - координально в отправляемых заголовках должен измениться только 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 раз
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 10:28 |
так что все передается как надо - один в один как браузер (ну почти ) с одним лишь отличием - файлы незагружаются
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 06/04/07 в 11:46 |
bleed писал: | Код: | $out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData; |
а зачем эти символы? всегда использовалось просто \n\n |
для совместимости.
|
|
|
|
С нами с 19.02.03
Сообщения: 1284
Рейтинг: 354
|
Добавлено: 06/04/07 в 11:54 |
почитал про http, да ты был прав \r\n реомендуют... хотя раньше я писал на perl и никогда такого не видел нигде.
как я понял у тебя все параметры приходять коректно, т.е. скриптом ты их пролучаешь и последний параметр name="upload" передается и обробатывается нормально, так? только массив $_FILES пустой? если так тоя сдаюсь
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 12:59 |
еех - яб тож сдался - немогу
Нашел какую-то драную гэсту - попробывать - может получится отследить проблему - в ней просто передается сообщение, но отправка идет через мультипарт - и хрен даже туда незапостилось
Хотя все точно так же полностью совпадает - сообщения нет.
пойду еще где нибудь поспрашаю...
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 19.11.03
Сообщения: 3973
Рейтинг: 2362
|
Добавлено: 06/04/07 в 13:51 |
Ты сделал то что я написал тебе выше?
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 06/04/07 в 14:36 |
xreload писал: | Lamagro:заголовок запроса от тела запроса отделяется 2-мя переводами каретки. |
это?
дык там же и так два перевода каретки - раз нет?
Код: | $out .= "Content-length: ".strlen($PostData)."\r\n\r\n".$PostData; |
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 09/04/07 в 09:42 |
проехали
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
С нами с 01.03.06
Сообщения: 629
Рейтинг: 620
|
Добавлено: 09/04/07 в 11:00 |
сразу скажу - не разбирался глубоко в вашем коде - может еще где лаги есть (если быстро писать, то с боундари легко напутать)... но имхо - вот так не стоило...
Код: |
$PostData .= file_get_contents("./".$Dir."/".$v)."\r\n"; //Получаем содержимое файла
|
я например при отправке атачей в писмах - использую следующее:
тип контента
Код: |
"Content-Transfer-Encoding: base64\n";
|
а содержимое файла -
Код: |
= chunk_split(base64_encode(file_get_contents($attfile)));
|
на прямую (без коверканья base64) файл передавать можно - но полюбому необходимо какие-то манипуляции с ним произвести.
|
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 09/04/07 в 11:10 |
Всем присутствовавшим спасибо. Всех оценил
Вопрос решен!
Подвело невнимание к мелочам.
Нужно вот так:
Код: |
$boundary = "------------".generate_password(22);
$PostData .= "--".$boundary.\n;
$PostData .= "Content-Disposition: form-data; name=\"username\"".\n\n;
$PostData .= trim($username).\n;
$PostData .= "--".$boundary.\n\n; |
ну и так далее...
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|
SexBlogs.Name
С нами с 13.10.03
Сообщения: 3159
Рейтинг: 962
|
Добавлено: 09/04/07 в 11:11 |
Heavy писал: | на прямую (без коверканья base64) файл передавать можно - но полюбому необходимо какие-то манипуляции с ним произвести. |
кстати файл передался просто так:
Код: | $PostData .= file_get_contents("./".$Dir."/".$v).DCRLF; |
так что вполне возможно работать и без преобразования .
|
|
Submit your blog to the sex blogs list. PR=3 Quickly approve! 10 posts min. Ping every 6 hour!
|
0
|
|
|