Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2010, 00:13   #1
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию VB.NET HttpWebRequest

Хочу написать программу по отправке содержимого web форм через мою программу.
Использую методы HttpWebRequest и HttpWebResponse.
Пишу на Basic'e в Visual Studio.NET 2008
И вот какая проблема:
При нажатии на кнопку должен отправляться запрос(пока без ответа), и при его отправки мне пишут ошибку:Невозможно отправить тело содержимого с данным типом предиката.
Что это за ошибка?
Вот код на VB.NET:
Код:
Imports System
Imports System.Net
Imports System.Text
Imports System.IO
Imports System.Web
Public Class Form1
  
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim zapros As HttpWebRequest = HttpWebRequest.Create("http://localhost/file/")
        zapros.UserAgent = "Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 MRA 5.5 (build 02746) Firefox/2.0.0.14"
        zapros.Accept = "text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5"
        zapros.Headers.Add("Accept-Language:ru")
        zapros.SendChunked = True
        zapros.TransferEncoding = "gzip"
        zapros.KeepAlive = True
        zapros.Connection = "Open"
        zapros.Referer = "http://localhost/file/"
        zapros.ContentType = "application/x-www-form-urlencoded"
        Dim sd As String = "?gif=2&bt=1"
        Dim btar As Byte() = Encoding.GetEncoding(1251).GetBytes(sd)
        zapros.ContentLength = btar.Length
        zapros.GetRequestStream().Write(btar, 0, btar.Length)
    End Sub
End Class
Вот то что я отправляю:
Код:
POST /file/ HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.8.1.14) Gecko/20080404 MRA 5.5 (build 02746) Firefox/2.0.0.14
Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language: ru-ru,ru;q=0.8,en-us;q=0.5,en;q=0.3
Accept-Encoding: gzip,deflate
Accept-Charset: windows-1251,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
Referer: http://localhost/file/
Content-Type: application/x-www-form-urlencoded
Content-Length: 10
А тело формы выглядет так: gif=2&bt=1
Вот и код страницы:
Код:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
<title>First</title>
</head>
<body>
Test page<BR>
<form action="" method="post">
<input name="gif" type="text" value=""><br><input name="bt" type="submit" value="1">
</form>
<?php

	echo "<IMG SRC='" . $_POST["gif"] . ".jpg'></img>";
	
?>
</body>
</html>
Тут скрины и архив со всеми подробностями:


Ну и архив с проектом
http://www.programmersforum.ru/attac...1&d=1264799178
Изображения
Тип файла: jpg error_sqreen.jpg (401.9 Кб, 321 просмотров)
Тип файла: jpg sam_sayt.jpg (92.5 Кб, 300 просмотров)
Вложения
Тип файла: rar vse_podrobnosti.rar (397.1 Кб, 25 просмотров)
reyn90 вне форума Ответить с цитированием
Старый 30.01.2010, 01:20   #2
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

не вижу, чтобы где-то в коде был указан, что запрос именно методом POST
Вот как я отправлял POST-запросы:
Код:
        Try

            rq = HttpWebRequest.Create(adr)
            'rq.Proxy = New WebProxy("127.0.0.1", 8888)
            rq.Method = "POST"
            rq.UserAgent = "Opera/9.20 (Windows NT 5.1; U; ru)"
            rq.Accept = "text/html, application/xml;q=0.9, application/xhtml+xml, image/png, image/jpeg, image/gif, image/x-xbitmap, */*;q=0.1"
            rq.Headers.Add(HttpRequestHeader.AcceptEncoding, "deflate")
            rq.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru-RU,ru;q=0.9,en;q=0.8")
            rq.Headers.Add(HttpRequestHeader.Cookie, kuk)

            rq.ContentType = "application/x-www-form-urlencoded"
            rq.KeepAlive = True
            Dim ByteArr As Byte() = Encoding.GetEncoding(1251).GetBytes(data)
            rq.ContentLength = ByteArr.Length()
            rq.GetRequestStream().Write(ByteArr, 0, ByteArr.Length)
            resp = rq.GetResponse()
            kuk = resp.Headers("Set-Cookie")
            qq = 0
            For Each n As Match In regkuk.Matches(kuk)
                s = n.Captures(0).Value
                For i = 0 To qq
                    If kuki(i) = s Then
                        Exit For
                    End If
                Next
                If i = qq + 1 Then
                    kuki(qq) = s
                    qq = qq + 1
                End If
            Next
            kuk = ""
            For i = 0 To qq - 1
                If i = qq - 1 Then
                    kuk = kuk & kuki(i)
                Else
                    kuk = kuk & kuki(i) & "; "
                End If
            Next

            reader = New StreamReader(resp.GetResponseStream, Encoding.GetEncoding(1251))
            txt = reader.ReadToEnd
            reader.Close()
            resp.Close()
        Catch ex As Exception
            Console.WriteLine(ex.Message)
        End Try
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 30.01.2010, 03:48   #3
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Спосибо! Ошибка по невнимательности. Но только вот что ты в Response написал там где куки? А попроще есть способ? Что то в роде
Код:
If Not String.IsNullOrEmpty(otvet.Headers("Set-Cookie")) Then
                sCookies = otvet.Headers("Set-Cookie")
            End If
Мне ещё нужно получить строку, но как тип даты Thu, 14 Jan 2010 12:37:02 GMT. А когда использую CDate он мне её сокращает до 14 Jan 2010 12:37:02
request.IfModifiedSince = "14 Jan 2010 12:37:02"
reyn90 вне форума Ответить с цитированием
Старый 30.01.2010, 11:29   #4
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

Это просто кусок кода))), куки мне понадобились, чтобы сохранять идентификатор PHP-сессии, чтобы эмулировать работу браузера.
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 30.01.2010, 23:24   #5
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Круто, а разве этот не эмулирует работу браузера:
Код:
Dim kuk As String
        If Not (String.IsNullOrEmpty(kuk)) Then
            zapros.Headers.Add(HttpRequestHeader.Cookie, kuk)
        End If

If Not (String.IsNullOrEmpty(res.Headers("Set-Cookie"))) Then
        kuk = response.Headers("Set-Cookie")
End If
        Label1.Text = kuk
Если нет, то научи пожалуста, меня сохранять ид ЗРЗ сессии. Объясни код который ты предоставил.
reyn90 вне форума Ответить с цитированием
Старый 30.01.2010, 23:25   #6
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Цитата:
Помощь по ассемблеру:
ICQ: 368161244
e-mail: informatik101@mail.ru
Это настоящие данные?
reyn90 вне форума Ответить с цитированием
Старый 31.01.2010, 00:59   #7
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

alexcoder
Тестирую программу на http://mp3hall.net/
Вот что пишет перехватчик запросов:
Код:
GET /index.php?do=register HTTP/1.1
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-shockwave-flash, application/xaml+xml, application/vnd.ms-xpsdocument, application/x-ms-xbap, application/x-ms-application, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */*
Referer: http://mp3hall.net/index.php?do=register
Accept-Language: ru
UA-CPU: x86
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 5.5 (build 02746); MRSPUTNIK 2, 1, 0, 4 SW; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Host: mp3hall.net
Connection: Keep-Alive
Cookie: __utma=158730982.76485036.1264299745.1264399970.1264895252.4; __utmb=158730982; __utmz=158730982.1264312757.2.2.utmccn=(referral)|utmcsr=ru.redtram.com|utmcct=/go/236005732/top100/|utmcmd=referral; advmaker_pop=1; popup_num=3; hotlog=1; __utmc=158730982; rtn4p=8; dle_newpm=0; PHPSESSID=9d7b04a3e952b7cb642768334686d49d
А вот код:
Код:
Dim day, mes, god, ch, min, cek, polf, mec, dayweek, daypol As String
        Dim vrem As Date = Date.Now
        ch = vrem.Hour
        min = vrem.Minute
        cek = vrem.Second
        day = vrem.Day
        mes = vrem.Month
        If mes = 1 Then
            mec = "Jan"
        ElseIf mes = 2 Then
            mec = "Feb"
        ElseIf mes = 3 Then
            mes = "Mar"
        ElseIf mes = 4 Then
            mec = "Apr"
        ElseIf mes = 5 Then
            mes = "May"
        ElseIf mes = 6 Then
            mec = "Jun"
        ElseIf mes = 7 Then
            mes = "Jul"
        ElseIf mes = 8 Then
            mec = "Aug"
        ElseIf mes = 9 Then
            mes = "Sep"
        ElseIf mes = 10 Then
            mec = "Oct"
        ElseIf mes = 11 Then
            mes = "Nov"
        ElseIf mes = 12 Then
            mec = "Dec"
        End If
        god = vrem.Year
        dayweek = vrem.DayOfWeek
        If dayweek = 1 Then
            daypol = "Mon"
        ElseIf dayweek = 2 Then
            daypol = "Tue"
        ElseIf dayweek = 3 Then
            daypol = "Wen"
        ElseIf dayweek = 4 Then
            daypol = "Thu"
        ElseIf dayweek = 5 Then
            daypol = "Fri"
        ElseIf dayweek = 6 Then
            daypol = "Sat"
        ElseIf dayweek = 7 Then
            daypol = "Sun"
        End If
        polf = daypol & ", " & day & " " & mec & " " & god & " " & ch + 3 & ":" & min & ":" & cek & " GMT"

        Label1.Text = polf
        '--------------------НАШ ПЕРВЫЙ ЗАПРОС------------------------
        Try
            Dim zapros As Net.HttpWebRequest = Net.HttpWebRequest.Create("http://mp3hall.net/")
            zapros.Method = "POST"
            zapros.UserAgent = "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; MRA 5.5 (build 02746); MRSPUTNIK 2, 1, 0, 4 SW; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30; InfoPath.2; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)"
            zapros.Accept = "*/*"
            zapros.Headers.Add(HttpRequestHeader.AcceptEncoding, "gzip,deflate")
            zapros.Headers.Add(HttpRequestHeader.AcceptLanguage, "ru")
            zapros.IfModifiedSince = polf

            'zapros.Headers.Add(HttpRequestHeader.AcceptCharset, "windows-1251,utf-8;q=0.7,*;q=0.7")
            'zapros.Headers.Add(HttpRequestHeader.KeepAlive, "300")
            zapros.Connection = "Open"
            zapros.Referer = "http://mp3hall.net/"
            zapros.ContentType = "application/x-www-form-urlencoded"
            zapros.KeepAlive = True
            Dim pol As String = "index.php?do=register&dle_rules_accept=yes"
            Dim array As Byte() = Encoding.GetEncoding(1251).GetBytes(pol)
            zapros.ContentLength = array.Length()
            zapros.GetRequestStream().Write(array, 0, array.Length)

            Dim res As HttpWebResponse = zapros.GetResponse()
            Dim reader As StreamReader = New StreamReader(res.GetResponseStream, Encoding.GetEncoding(1251))
            TextBox1.Text = reader.ReadToEnd
            reader.Close()
            res.Close()
        Catch ex As Exception
            MsgBox(ex.Message)
        End Try
В TextBox' е пишет что то непонятное ‹.В Чём ошибка?
reyn90 вне форума Ответить с цитированием
Старый 31.01.2010, 10:30   #8
alexcoder
Форумчанин
 
Регистрация: 31.05.2009
Сообщений: 786
По умолчанию

для даты используй такую конструкцию:
Код:
       My.Application.ChangeCulture("en-US")
        dat = Format(Now, "ddd, dd MMM yyyy hh:mm:ss") & " GMT"
Помощь с программами:
vk.com/alexcoder1
e-mail: informatik101@mail.ru
alexcoder вне форума Ответить с цитированием
Старый 26.02.2010, 06:35   #9
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

Цитата:
Сообщение от alexcoder Посмотреть сообщение
для даты используй такую конструкцию:
Код:
       My.Application.ChangeCulture("en-US")
        dat = Format(Now, "ddd, dd MMM yyyy hh:mm:ss") & " GMT"
Непомогает
Изображения
Тип файла: jpg Безимени-1.jpg (65.5 Кб, 257 просмотров)
reyn90 вне форума Ответить с цитированием
Старый 27.03.2010, 05:06   #10
reyn90
Пользователь
 
Регистрация: 30.05.2009
Сообщений: 54
По умолчанию

А если на сайте гет нужно что делать? Как решать ошибку?
reyn90 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
HttpWebRequest и Cookie d9m0n Общие вопросы .NET 1 23.12.2009 11:38
Cookie & HttpWebRequest & авторизация Geniy00 Общие вопросы .NET 0 29.11.2009 21:03
Проблема с HttpWebRequest и HttpWebResponse 3dgraph Общие вопросы .NET 2 15.07.2009 11:20
HttpWebRequest и HttpWebResponse Bbo Общие вопросы .NET 1 14.05.2009 15:51