Укпукп Керпукп
14 сообщений
#14 лет назад
Пытаюсь отправить запрос через HttpWebRequest (.Net), на страничку
Последний раз парсил ASPX сайт больше года назад, забыл в чем "подвох" при парсинге.
Помню скрытые поля __VIEWSTATE и __TARGET...

Написал маленькую функцию для отправки пост, все вроде нормально (смотрю через сниффер), но получаю переадресацию на PageError.aspx
Запрос должен выбрать "Тип транспорта" в выпадающем списке на веб форме ()

Если кому не в лом натолкните где может быть подвох, можно объяснить "на" PHP или любом .Net языке
Роман П.
1599 сообщений
#14 лет назад
Цитата ("redandyellowdays"):
все вроде нормально (смотрю через сниффер), но получаю переадресацию на PageError.aspx

значит, не все нормально. Смотрите, что отправляет ваш скрипт и что сниффер показывает.

Цитата ("redandyellowdays"):
Помню скрытые поля __VIEWSTATE и __TARGET...

Смотрите саму форму, какие поля она там содержит, их и передавайте. Там несколько hidden полей, кроме __VIEWSTATE.

Цитата ("redandyellowdays"):
в лом натолкните

писать решение или смотреть за вас, чего там передается - бесплатно однозначно в лом.)
Евгений Кашкаров
450 сообщений
#14 лет назад
Цитата ("redandyellowdays"):
Написал маленькую функцию для отправки пост, все вроде нормально (смотрю через сниффер), но получаю переадресацию на PageError.aspx

Посмотрите также и что отправляет браузер, я наловил поля ctl00$sm, __EVENTTARGET, __EVENTARGUMENT, __LASTFOCUS, __VIEWSTATE, ctl00$contentPlaceHolder$cpExtenderFilter_ClientState, ctl00$contentPlaceHolder$ddlTransportType, ctl00$contentPlaceHolder$ddlVendors, ctl00$contentPlaceHolder$ddlCars, ctl00$contentPlaceHolder$ddlModifications, ctl00$contentPlaceHolder$cpExtenderSendError_ClientState, ctl00$contentPlaceHolder$noBot$noBot_NoBotExtender_ClientState, ctl00$contentPlaceHolder$txtErrorAuto, ctl00$contentPlaceHolder$txtErrorText, __ASYNCPOST
Укпукп Керпукп
14 сообщений
#14 лет назад
Может кто поможет?

Код


Imports System.IO
Imports System.Net
Imports System.Web
Imports System.Text.RegularExpressions


Public Class Form1
Dim MyCookies As New CookieContainer

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
System.Net.ServicePointManager.Expect100Continue = False
End Sub

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Dim MyRequest As HttpWebRequest = HttpWebRequest.Create(New Uri("http://www.gruz-shina.ru/tires.aspx"))
Dim MyResponse As HttpWebResponse
Dim MyReader As StreamReader
Dim MyWriter As Stream
Dim PostData As String
Dim PageContent As String
Dim MyMatch As Match
Dim ByteArray As Byte()


' Load main page
MyRequest.Method = WebRequestMethods.Http.Get
MyRequest.CookieContainer = New CookieContainer
MyRequest.CookieContainer = MyCookies
MyRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
MyRequest.Referer = "http://www.google.com/"
MyRequest.Accept = "text/html, application/xhtml+xml, */*"
MyRequest.Headers.Add("Accept-Language", "en-us")

MyResponse = MyRequest.GetResponse()
MyReader = New StreamReader(MyResponse.GetResponseStream())
PageContent = MyReader.ReadToEnd()
MyResponse.Close()


' Load page with form
MyRequest = HttpWebRequest.Create("http://www.gruz-shina.ru/select/tiresbyauto.aspx")
MyRequest.Method = WebRequestMethods.Http.Get
MyRequest.CookieContainer = New CookieContainer
MyRequest.CookieContainer = MyCookies
MyRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
MyRequest.Referer = "http://www.gruz-shina.ru/tires.aspx"
MyRequest.Accept = "text/html, application/xhtml+xml, */*"
MyRequest.Headers.Add("Accept-Language", "en-us")

MyResponse = MyRequest.GetResponse()
MyReader = New StreamReader(MyResponse.GetResponseStream())
PageContent = MyReader.ReadToEnd()
MyResponse.Close()
MyMatch = Regex.Match(PageContent, "id=""__VIEWSTATE""\s+value=""(?<Value>+)""")


' Send form to server
MyRequest = HttpWebRequest.Create("http://www.gruz-shina.ru/select/tiresbyauto.aspx")
MyRequest.Method = WebRequestMethods.Http.Post
MyRequest.ContentType = "application/x-www-form-urlencoded; charset=utf-8"
MyRequest.CookieContainer = New CookieContainer
MyRequest.CookieContainer = MyCookies
MyRequest.UserAgent = "Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)"
MyRequest.Referer = "http://www.gruz-shina.ru/select/tiresbyauto.aspx"
MyRequest.Accept = "*/*"
MyRequest.Headers.Add("Accept-Language", "en-us")
MyRequest.Headers.Add("X-MicrosoftAjax", "Delta=true")
MyRequest.Headers.Add("Cache-Control", "no-cache")

PostData = ""
PostData &= "ctl00$sm=ctl00%24contentPlaceHolder%24upnlFilterAuto%7cctl00%24contentPlaceHolder%24ddlTransportType"
PostData &= "&__EVENTTARGET=ctl00%24contentPlaceHolder%24ddlTransportType"
PostData &= "&__EVENTARGUMENT= "
PostData &= "&__LASTFOCUS="
PostData &= "&__VIEWSTATE=" & MyMatch.Groups("Value").Value.Replace("/", "%2F").Replace("+", "%20")
ByteArray = System.Text.Encoding.UTF8.GetBytes(PostData)
MyRequest.ContentLength = byteArray.Length
MyWriter = MyRequest.GetRequestStream()
MyWriter.Write(byteArray, 0, byteArray.Length)
MyWriter.Close()

MyResponse = MyRequest.GetResponse()
MyReader = New StreamReader(MyResponse.GetResponseStream())
PageContent = MyReader.ReadToEnd()
MyResponse.Close()
End Sub

End Class




Кто-то сталкивался с полем http заголовка "X-MicrosoftAjax", что-то кажется в нем вся проблема ...
Или с ошибкой вида "61|pageRedirect||/GenericErrorPage.aspx?aspxerrorpath=/select/tiresbyauto.aspx|"

???