Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> отправка изображения POST запросом 
V
    Опции темы
borisbn
Дата 22.2.2011, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 1
Всего: 135



День добрый.
Требуется отправить из программы на C# POST-запрос на сервер.
То, что тема не новая - знаю. Искал и на винграде и в гугле и в rsdn, пробовал кучу вариантов, но... воз и ныне там. В браузере всё работает - у меня - нет ( скорее всего, у меня 0,хрен десятых опыта работы с web-технологиями... )
Ну, хватит отступлений.
Есть сайт
http://imagehost.spark-media.ru/m
вот его "содержимое"
Код

<form action='../upload.php' method='post' enctype='multipart/form-data'>
<table cellpadding="0" cellspacing="0">
        <tr>
 
                <td>
                        <input type='file' name='uploadfile'>
                        <input type='submit' name='sendbtn' value='Отправить!'> :)
                        <input type='hidden' name='light'>
                </td>
        </tr>
</table>

в программе делаю так
Код

private string UploadImageEx( string filename )
{
    Uri uri = new Uri( "http://imagehost.spark-media.ru/upload.php?light" );
    HttpWebRequest webrequest = (HttpWebRequest)WebRequest.Create( uri );
    webrequest.ContentType = "multipart/form-data";
    webrequest.Method = "POST";

    // Формируем заголовки запроса
    string postHeader = "Content-Type: multipart/form-data\r\n";
    byte[] postHeaderBytes = Encoding.UTF8.GetBytes( postHeader );

    byte[] buffer;
    // Читаем файл
    using ( FileStream fileStream = new FileStream( filename, FileMode.Open, FileAccess.Read ) )
    {
        buffer = new byte[fileStream.Length];
        fileStream.Read(buffer, 0, buffer.Length);
    }
    long length = postHeaderBytes.Length + buffer.Length;
    webrequest.ContentLength = length;

    // Пишем заголовок запроса
    Stream requestStream = webrequest.GetRequestStream();
    requestStream.Write( postHeaderBytes, 0, postHeaderBytes.Length );

    // Пишем файл
    requestStream.Write( buffer, 0, buffer.Length );

    // Получаем ответ
    WebResponse response = webrequest.GetResponse();
    Stream s = response.GetResponseStream();

    // Читаем
    StreamReader sr = new StreamReader( s, Encoding.GetEncoding( "UTF-8" ) );
    string result = sr.ReadToEnd();
    sr.Close();

    return result;
}

...
    string res = UploadImageEx( "D:/image.png" );
    MessageBox.Show( res, "Script" );



ответ всегда один - таймаут запроса.

Вопрос: что я делаю не так.

Спасибо.

Это сообщение отредактировал(а) borisbn - 22.2.2011, 23:27


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wester
Дата 23.2.2011, 01:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



borisbn
совет теоретический - сравнить что шлет браузер, и что шлет прога.

если нужен практический - могу скинуть свой класс - писал недавно обертку под ImageShack.
в принципе одно и тоже
PM MAIL   Вверх
borisbn
Дата 23.2.2011, 01:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 1
Всего: 135



wester
1. С праздником
2. Спасибо за теорию, но под руками нет средств, чтобы сравнить. В Opera есть только Dragonfly, который выдаёт
Цитата

Исходный запрос
POST /upload.php HTTP/1.1
User-Agent: Opera/9.80 (Windows NT 5.1; U; ru) Presto/2.7.62 Version/11.01
Host: imagehost.spark-media.ru
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-RU,ru;q=0.9,en;q=0.8
Accept-Charset: iso-8859-1, utf-8, utf-16, *;q=0.1
Accept-Encoding: deflate, gzip, x-gzip, identity, *;q=0
Expect: 100-continue
Referer: http://imagehost.spark-media.ru/m/
Cookie: PHPSESSID=73tsofad88d1kfksslq3greia6; __utmz=72740044.1295720496.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none); sm_id=4444; sm_hash=673ce3c110ac1d568459e836cc1253b3; informerStatus=hidden; __utma=72740044.353653645.1295720496.1298240602.1298366017.47; __utmc=72740044; sm_session=660348175b7391f1d53dec0e4f121021d37f0a8e; sm_zoneid=0
Cookie2: $Version=1
Connection: Keep-Alive, TE
TE: deflate, gzip, chunked, identity, trailers
Content-Length: 16972
Content-Type: multipart/form-data; boundary=----------MBy7IjZsNso4mfqEz4eEdT

Исходный ответ
HTTP/1.1 302 Found
Date: Tue, 22 Feb 2011 22:13:41 GMT
Server: Apache/1.3.37 (Unix)
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Set-Cookie: sm_zoneid=0; expires=Thu, 24-Mar-2011 22:13:41 GMT; path=/; domain=.spark-media.ru
Set-Cookie: sm_session=27c22500f9055516886dae308934f2293e002873; domain=.spark-media.ru; path=/;
Location: http://imagehost.spark-media.ru/?light
Connection: close
Transfer-Encoding: chunked
Content-Type: text/html

а что шлёт моя прога - вообще не знаю как посмотреть.
3. От класса не откажусь. Спасибо


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
wester
Дата 23.2.2011, 01:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 675
Регистрация: 27.2.2009

Репутация: 3
Всего: 13



borisbn
Opera показывает какие хидеры шлет браузер что бы получить страницу , то есть тебе надо полностью симулировать работу браузера в своем приложении, а именно хидеры реквеста странички 

для того что бы узнать что шлет прога можно поступить следующим образом 
Установить fiddler и установить свойство Proxy у webrequest; 

если не ошибаюсь у fiddler порт по умолчанию должен быть 8888
тогда в код, после обьявления webrequest надо установить у проперти Proxy какой порт слушать

http://msdn.microsoft.com/ru-ru/library/sy...uest.proxy.aspx

сейчас пришлю в личку код 
я думал там больше кода) 
http://pastebin.com/x9mKdxVe
код хочет рефакторинга, а потому indus-style кое - где присутствует smile

Это сообщение отредактировал(а) wester - 23.2.2011, 01:29
PM MAIL   Вверх
borisbn
Дата 15.3.2011, 15:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 4875
Регистрация: 6.2.2010
Где: Ростов-на-Дону

Репутация: 1
Всего: 135



wester, спасибо! Помогло. +1


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
Partizan
PashaPash

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, Partizan, PashaPash.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | .NET для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1224 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.