string PostDataStr = "";
string vHeaders = "";
vHeaders += "Content-Type: multipart/form-data; boundary=---------------------------7d7213c140172" + "\r\n";
string Cont = "\r\n";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"uploadFile1\"; filename=\"\"" + "\r\n";
Cont += "Content-Type: application/octet-stream" + "\r\n";
Cont += "" + "\r\n";
Cont += "" + "\r\n";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"Submit\"" + "\r\n";
Cont += "" + "\r\n";
Cont += "Sub" + "\r\n";
Cont += "-----------------------------7d735b1b140172--" + "\r\n";
Cont += "\r\n";
vHeaders += "Content-Length: " + Cont.Length + "\r\n";
vHeaders += Cont;
byte[] PostDataByte = Encoding.UTF8.GetBytes(PostDataStr);
MessageBox.Show(vHeaders);
//return;
webBrowser1.Navigate("http://localhost/blah/blah.php", "", PostDataByte, vHeaders);
Загрузка файла HTTP запросом
Пишу программу, которая загружает файл на сервер.
Но столкнулся с проблемой.
Код:
Файлы не загружает, на выходе говорит что отправленно GETом. возможно в этом проблема. подскажите как решить?
заранее благодарен.
скорее всего да. у GET запроса есть ограничение на длинну строки запроса. кажется 255 символов.
может быть подскажешь как решить?!
Не, 255 - это вряд ли :) Я ГЕТом иогда такие "трактаты" отсылаю и ничего.
Реально там чего-то кажется 8кб то ли на ГЕТ запрос, то ли на передаваемый URL в целом. Хотя, могу и ошибаться.
bmn, да, все хорошо, но файлы ГЕТом не зальешь, это правда,
[COLOR="Gray"]извини, возможно помог бы, но мне уже пора выходить...[/COLOR]
тем более, что ты сами данные в раздел ПОСТ данных запихиваеш. возможно сервер на них просто-напросто забивает, потому что при ГЕТ запросе их быть там не должно
делаю что-то вроде:
Код:
string vHeaders = "";
vHeaders += "Content-Type: multipart/form-data; boundary=---------------------------7d7213c140172" + "\r\n";
string Cont = "";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"uploadFile1\"; filename=\"\"" + "\r\n";
Cont += "Content-Type: application/octet-stream" + "\r\n";
Cont += "" + "\r\n";
Cont += "" + "\r\n";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"Submit\"" + "\r\n";
Cont += "" + "\r\n";
Cont += "Sub" + "\r\n";
Cont += "-----------------------------7d735b1b140172--" + "\r\n";
Cont += "\r\n";
vHeaders += "Content-Length: "+Cont.Length+"\r\n";
string PostDataStr = Cont;
byte[] PostDataByte = Encoding.UTF8.GetBytes(PostDataStr);
webBrowser1.Navigate("http://localhost/blah/blah.php", "", PostDataByte, vHeaders);
vHeaders += "Content-Type: multipart/form-data; boundary=---------------------------7d7213c140172" + "\r\n";
string Cont = "";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"uploadFile1\"; filename=\"\"" + "\r\n";
Cont += "Content-Type: application/octet-stream" + "\r\n";
Cont += "" + "\r\n";
Cont += "" + "\r\n";
Cont += "-----------------------------7d735b1b140172" + "\r\n";
Cont += "Content-Disposition: form-data; name=\"Submit\"" + "\r\n";
Cont += "" + "\r\n";
Cont += "Sub" + "\r\n";
Cont += "-----------------------------7d735b1b140172--" + "\r\n";
Cont += "\r\n";
vHeaders += "Content-Length: "+Cont.Length+"\r\n";
string PostDataStr = Cont;
byte[] PostDataByte = Encoding.UTF8.GetBytes(PostDataStr);
webBrowser1.Navigate("http://localhost/blah/blah.php", "", PostDataByte, vHeaders);
Запрос ПОСТом идет теперь, но все равно не передает файлы и остальные данные. Подскажит кто-нибудь в чём здесь дело то??
рекомендую подебажить серверные скрипты, которые всё это добро принимают
Код:
<?
echo "<PRE>".print_r ($_SERVER, true)."</PRE>";
echo "<PRE>".print_r ($_GET, true)."</PRE>";
echo "<PRE>".print_r ($_POST, true)."</PRE>";
echo "<PRE>".print_r ($_FILES, true)."</PRE>";
?>
<form method="POST" enctype="multipart/form-data">
<p> 1: <input type="file" size=25 name="uploadFile1" >
<input type='submit' name="Submit" value="Sub">
</form>
echo "<PRE>".print_r ($_SERVER, true)."</PRE>";
echo "<PRE>".print_r ($_GET, true)."</PRE>";
echo "<PRE>".print_r ($_POST, true)."</PRE>";
echo "<PRE>".print_r ($_FILES, true)."</PRE>";
?>
<form method="POST" enctype="multipart/form-data">
<p> 1: <input type="file" size=25 name="uploadFile1" >
<input type='submit' name="Submit" value="Sub">
</form>
Может тогда кто-нибудь подскажет как "нажать" на input type="submit" из webBrowser'a?
вариант номер два: form.submit()
приколы типа Submit.click() вряд ли будут работать
если это ActiveX браузера, то он может делать такие приколы: webBrowser.Navigate("java script:form.submit()")
но с файлом никак не разберусь. в input file не подставишь так просто значение, не катит что-то типа
webBrowser.Document.Forms[0].GetElementByTagName ("input")[0].SetAttribute ("value", "C:\file.txt");
webBrowser.Navigate ("java script: document.forms[0].Submit();");
а с HTTP запросом лажа какая-то..
файл может выбрать только пользователь мышкой. это сделано из соображений безопасности, чтобы ты скриптом не смог загрузить на сервер без ведома пользователя произвольный файлы с его машины
странно, почему он не пашет..
Цитата: bmn
ммм, остался только вариант с запросом..
странно, почему он не пашет..
странно, почему он не пашет..
Делается в пару строчек. Нужно только подобрать нужный MIME-тип:
http://forum.codenet.ru/showthread.php?t=34651