Автор Тема: помогите с HTTP заголовками  (Прочитано 2664 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
давно меня посещала идея написать прогу, чтоб в файлы она сама чего-нибудь выкладывала...
сегодня появилось время, начал разбираццо... наткнулся на хорошую статью Взаимодействие с другими сайтами через HTTP (HttpWebRequest и HttpWebResponse) попытался разобраццо...

вот что опера посылает на формум, когда я указав файлы, жму "отправить" (отправил простой текстовый файл)
POST /index.php?action=downloads&d=other HTTP/1.0
User-Agent: Opera/9.23 (Windows NT 5.1; U; ru)
Host: forum.elsite.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
Referer: http://forum.elsite.ru/index.php?action=downloads&d=other
Cookie: SMFCookie119172794=a%3A4%3A%7Bi%3A0%3Bs%3A4%3A%222615%22%3Bi%3A1%3Bs%3A40%3A%228625757d34278cee330ab6c6b4c3837f5744ead2%22%3Bi%3A2%3Bi%3A1364583578%3Bi%3A3%3Bi%3A0%3B%7D; PHPSESSID=2f60ebae21b1dc9b9cf868aa9d4fa98a
Cookie2: $Version=1
Proxy-Connection: close
Content-Length: 494
Content-Type: multipart/form-data; boundary=----------MmfN11OfiQhFKaQiB7bxXf

------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="dir"

other/
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="userfile"; filename="testxxx.txt"
Content-Type: text/plain

testdada
blablabla =)
end of test data
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="info"

 )
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="upload"


------------MmfN11OfiQhFKaQiB7bxXf--
кстати, русские буквы тут куда-то пропадают.  например в поле инфо я писал тест ) - осталась одна скобка - это глюк Fiddler'a ?

что за "------------MmfN11OfiQhFKaQiB7bxXf" - которое повторяется несколько раз

Content-Disposition - это я так понял один из заголовков? тогда почему он несколько раз меняется?

пытался оформить код... на всякий случай, сначала загрузить страницу, а потом, используя куки - пытался отправить данные...
кстати, ща можно выкладывать файлы на форум вообще не залогинившись =)
        ' url.Text = "http://forum.elsite.ru/index.php?action=downloads&d=other"
        Dim myHttpWebRequest As HttpWebRequest = HttpWebRequest.Create(url.Text)
        myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888) ' для Fiddler
        myHttpWebRequest.UserAgent = "LEO File Uploader" ' =)
        Dim myHttpWebResponse As HttpWebResponse = myHttpWebRequest.GetResponse()

        Dim myStreamReader As New StreamReader(myHttpWebResponse.GetResponseStream, Encoding.GetEncoding(1251))
        Dim st As String = myStreamReader.ReadToEnd()

        Dim sCookies As String = ""
        If Not String.IsNullOrEmpty(myHttpWebResponse.Headers("Set-Cookie")) Then
            sCookies = myHttpWebResponse.Headers("Set-Cookie")
        End If

        myHttpWebRequest = HttpWebRequest.Create(url.Text)
        myHttpWebRequest.Proxy = New WebProxy("127.0.0.1", 8888)
        myHttpWebRequest.Method = "POST"
        myHttpWebRequest.Referer = "http://forum.elsite.ru/index.php?action=downloads&d=other"
        myHttpWebRequest.UserAgent = "LEO File Uploader"

        myHttpWebRequest.ContentType = "multipart/form-data"


        'передаем куки, полученные в предыдущем запросе
        If Not String.IsNullOrEmpty(sCookies) Then
            myHttpWebRequest.Headers.Add(HttpRequestHeader.Cookie, sCookies)
        End If

        'ставим False, чтобы не делать автоматический редирект
        myHttpWebRequest.AllowAutoRedirect = False



вот... тут все почти как в примерах в статье выше... а как дальше я не знаю =)
можно например добавить
        myHttpWebRequest.Headers.Add("Content-Disposition", "form-data; name=" & Chr(34) & "dir" & Chr(34))
        Dim sQueryString As String = "other/"
        Dim ByteArr As Byte() = Encoding.GetEncoding(1251).GetBytes(sQueryString)
        myHttpWebRequest.ContentLength = ByteArr.Length()
        myHttpWebRequest.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
но тогда уже больше в поток ничего не дописать... как сделать?
маюсь с самого утра...
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox


Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #1 : 18.09.07, 18:11:15 »
сформулирую вопрос точнее:
 что писАть в myHttpWebRequest.ContentType
если он меняетсяется несколько раз, и что надо писАть непосредственно в сам поток?

пробовал написать в поток сразу все - не работает =)

да, приведенный выше код запроса, взят из вкладки Raw в фиддлере, если нажать TextView, то там вот что:
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="dir"

other/
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="userfile"; filename="testxxx.txt"
Content-Type: text/plain

testdada
blablabla =)
end of test data
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="info"

 )
------------MmfN11OfiQhFKaQiB7bxXf
Content-Disposition: form-data; name="upload"


------------MmfN11OfiQhFKaQiB7bxXf--

вот это вот, только без "------------MmfN11OfiQhFKaQiB7bxXf" я и пытался писать в поток, задав ContentType = "multipart/form-data"
как уже сказал - не пашет. форум просто выдет ту же страничку.
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #2 : 18.09.07, 18:25:57 »
и еще вопрос... просто по html =)
<form name="upload" action="" method="POST" enctype="multipart/form-data">
эта строчка с кода страницы. action="" - страница-обработчик не указана. что используется по-дефолту? просто index.php ?
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox

Оффлайн evgsh

  • Постоялец
  • ***
  • Сообщений: 217
  • Карма: -5
  • Пол: Мужской
  • -=TUX=-
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #3 : 18.09.07, 20:02:45 »
и еще вопрос... просто по html =)
<form name="upload" action="" method="POST" enctype="multipart/form-data">
эта строчка с кода страницы. action="" - страница-обработчик не указана. что используется по-дефолту? просто index.php ?
Если action не указан, то используется текущая страница, т.е страница на которой находиться форма.
С остальным постараюсь помочь чуть попозже.

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #4 : 20.09.07, 19:10:59 »
жду помощи...
пока что нашел еще статью на сишарпе - http://www.codeproject.com/csharp/UploadFileEx.asp
попробовал поюзать их проект... получил практрически идентичный с браузером запрос, только в браузере файл отправился, а в проге - нет =)

opera
POST /index.php?action=downloads&d=other HTTP/1.0
User-Agent: Opera/9.23 (Windows NT 5.1; U; ru)
Host: forum.elsite.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
Referer: http://forum.elsite.ru/index.php?action=downloads&d=other
Proxy-Connection: close
Content-Length: 468
Content-Type: multipart/form-data; boundary=----------FxN2SUKuxh9C7987clC0L8

------------FxN2SUKuxh9C7987clC0L8
Content-Disposition: form-data; name="dir"

other/
------------FxN2SUKuxh9C7987clC0L8
Content-Disposition: form-data; name="userfile"; filename="xtest2cs2-2.txt"
Content-Type: text/plain

c#UploadEx
test
------------FxN2SUKuxh9C7987clC0L8
Content-Disposition: form-data; name="info"


------------FxN2SUKuxh9C7987clC0L8
Content-Disposition: form-data; name="upload"


------------FxN2SUKuxh9C7987clC0L8--

prog
POST /index.php?action=downloads&d=other HTTP/1.1
Content-Type: multipart/form-data; boundary=----------8c9c9d7cb310c6a
Host: forum.elsite.ru
Content-Length: 418
Expect: 100-continue

------------8c9c9d7cb310c6a
Content-Disposition: form-data; name="dir"

other/
----------8c9c9d7cb310c6a
Content-Disposition: form-data; name="info"


----------8c9c9d7cb310c6a
Content-Disposition: form-data; name="upload"


----------8c9c9d7cb310c6a
Content-Disposition: form-data; name="userfile"; filename="xtest2cs2-2.txt"
Content-Type: text/plain

c#UploadEx
test
------------8c9c9d7cb310c6a--

отличается отстутсвием  некоторых заголовков от оперы (язык, поддержка картинок и тп.)
появился какой-то заголовок Expect: 100-continue - что это, еще не разобрался
ну и еще отличие - порядок следование полей формы изменен, опера отправляет файл вторым полем, прога - последним...

и что такое boundary и как его правильно формировать... тоже еще не выяснил...

заранее спасибо за помощь...
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox

Оффлайн rockerzz

  • Старожил
  • ****
  • Сообщений: 762
  • Карма: 118
  • Пол: Мужской
  • Freefly
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #5 : 20.09.07, 20:10:48 »
Самое правильное это обратится к rfc - http://www.w3.org/Protocols/rfc2616/rfc2616.html. Вот тебе в нем про Expect: - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.20
Fly like a brick

Оффлайн LEO

  • Ветеран
  • *****
  • Сообщений: 4417
  • Карма: 310
  • Пол: Мужской
    • Просмотр профиля
Re: помогите с HTTP заголовками
« Ответ #6 : 20.09.07, 21:45:58 »
Самое правильное это обратится к rfc - http://www.w3.org/Protocols/rfc2616/rfc2616.html. Вот тебе в нем про Expect: - http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.20
мало там чего понятно...
пробовал перед вызовом ответа (myHttpWebResponse  = myHttpWebRequest.GetResponse())
явно задать Expect путой строкой (Expect=""; )
все равно - фидлер показывает Expect: 100-continue

но все равно спасибо

вопрос остается открытым: как программно заполнить форму и отправить какой-нибудь файл в "файлы" форума?
http://is.gd/fpTeSMПродам книжки про Ajax и ASP.NET, http://is.gd/lDL64HПриглашаю в Dropbox