[VB.NET] Inlezen ASP webpagina's

Pagina: 1
Acties:

  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
Ik wil graag diverse html pagina's inlezen die door asp worden gemaakt.
De eerste pagina lukt prima, maar om de volgende pagina's te lezen kom ik niet uit. Op de asp pagina zit een knopje voor 'volgende pagina' die weer een stukje javascript uitvoert. Tevens belangrijk om te weten is dat je ook met NTLM moet aanloggen op de eerste pagina, anders komt er geen data terug. Dat aanloggen lukt ook nog wel.
Ik gebruik nu System.Net.Webclient of System.Net.WebRequest + WebResponse, waarmee ik de eerste pagina wel krijg, maar ik zou niet weten hoe ik dan dat 'volgende pagina' knopje virtueel kan indrukken en weer response krijg.
Als ik hierop zoek krijg ik zoveel ASP.Net info die ik die nodig heb, vandaar dat ik het jullie vraag.
Ik hoef geen werkende voorbeeld code. Een verwijzing naar de juiste namespace.class met mogelijkerwijs een hint in de goede richting, of een MS:KB artikel ben ik al blij mee _/-\o_

Als ik het echt allemaal van te voren wist...


  • faabman
  • Registratie: Januari 2001
  • Laatst online: 08-08-2024
in het javascriptje wat door de "volgende" knop wordt getriggerd bevind zich ongetwijfeld een (deel van) een url... misschien dat je deze kunt uitlezen en aan de hand daarvan de locatie van je nieuw op te vragen pagina kunt bepalen...

Op zoek naar een baan als Coldfusion webdeveloper? Mail me!


  • Yannick
  • Registratie: December 2000
  • Laatst online: 26-03-2024

Yannick

Bub MC

Zoals faabman al zegt moet je ff naar die javascript link kijken. Ik vermoed dat die een form submit met wat hidden fields. Kijk dus even naar de HTML source code van die pagina die je gaat scrapen om te zien wat er allemaal wordt opgestuurd met die link. Als je daarachter bent zul je die parameters moeten immiteren in je webrequest. Hier is een voorbeeldje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
<%@ Page Language="C#" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs E) {
myPage.Text =
readHtmlPage("http://www.aspalliance.com/aldotnet/examples/posttest.asp";);
}

private String readHtmlPage(string url)
{
String result = "";
String stufftopost = @"test1=You&test2=Posted&test3=Successfully";
StreamWriter myWriter = null;

HttpWebRequest objRequest = (HttpWebRequest)WebRequest.Create(url);
objRequest.Method = "POST";
objRequest.ContentLength = stufftopost.Length;
objRequest.ContentType = "application/x-www-form-urlencoded";

myWriter = new StreamWriter(objRequest.GetRequestStream());
myWriter.Write(stufftopost);
myWriter.Close();

HttpWebResponse objResponse =
(HttpWebResponse)objRequest.GetResponse();
StreamReader sr = new StreamReader(objResponse.GetResponseStream());
result = sr.ReadToEnd();
sr.Close();

return result;
}
</script>
<html>
<body>
<asp:literal id="myPage" runat="server"/>
</body>
</html>

  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
Beetje late reaktie door omstandigheden. Bedankt voor jullie reaktie.
Ik heb nu de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
        Dim WebRes As HttpWebResponse
        Dim WebReq As HttpWebRequest
        Dim sReader As System.IO.StreamReader
        Dim sWriter As System.IO.StreamWriter
        Dim NetCred As NetworkCredential
        Dim CredCache As CredentialCache
        Dim PostData As String
        Dim strBuf, strOut As String

        Try
            'Start web request
            WebReq = CType(WebRequest.Create("https://xxxStart.asp"), HttpWebRequest)

                NetCred = New NetworkCredential(strUserID, strPassword)
                CredCache = New CredentialCache()
                CredCache.Add(New Uri(("https://xxxStart.asp"), "Basic", NetCred)
                WebReq.Credentials = CredCache

            PostData = "javascript:__doPostBack('ucpagingmenu$lnkNext','')"
            WebReq.Method = "POST"
            WebReq.ContentLength = PostData.Length
            WebReq.ContentType = "application/x-www-form-urlencoded"
            sWriter = New StreamWriter(WebReq.GetRequestStream())
            sWriter.Write(PostData)
            sWriter.Close()
            WebRes = WebReq.GetResponse()
            sReader = New StreamReader(WebRes.GetResponseStream())
            strBuf = sReader.ReadToEnd
            sReader.Close()
   Catch ... etc


Het probleem is dat ik nu de melding "(405) Method not allowed" terug krijg van de server.
Als ik de eerste pagina uitlees met een streamreader krijg ik netjes de html in mijn string. Op die eerste pagina zit echter een tabel met daarin een onclick event. Hierin staat dus dat javascript commando.
Hoe krijg ik nou die volgende pagina??? :? Snap er niets van.

edit:

Als ik via de browser DIRECT naar de 2e pagina ga, krijg ik een leeg scherm met een knopje [continue], het lijkt toch echt te moeten gaan via dat knopje

[ Voor 9% gewijzigd door N0stradamus op 16-06-2004 16:26 ]

Als ik het echt allemaal van te voren wist...


  • CaptBiele
  • Registratie: Juni 2002
  • Laatst online: 23-05 16:11

CaptBiele

No Worries!

heb er geen ervaring mee hoor, maar die WebRequest zal toch wel een property URL hebben of iets dergelijks? Kun je hem niet nog eens toevoegen met die CredCache.Add() ?

just my 2 cents

  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
@captBiele
Helaas werkt dat niet zo, maar hoe het wel werkt.... ANYBODY???

Als ik het echt allemaal van te voren wist...


  • BasSpruit
  • Registratie: September 2002
  • Laatst online: 09-04-2022
eerst alle bestanden in die map ophalen, in een arraylist zetten en converteren naar een array.

daarna is het heel simpel om de volgende pagina in een link neer te zetten.

code:
1
2
3
4
5
6
for i = lbound(array) to lbound(array)
  if array(I) = Huidige pagina then
    VorigePagina = Array(I - 1)
    VolgendePagina = Array(I + 1)
  end if
next

  • N0stradamus
  • Registratie: April 2002
  • Laatst online: 19-07-2024
Map? Welke map?
Map op de https site kan ik niet benaderen als map, da's afgeschermd. Alles moet via die start.asp pagina. Er wordt gewerkt met een soort sessieid denk ik zo, maar hoe implementeer ik dat met die WebRequest/WebResponse?
Ik moet dus die eerste pagina opvragen, vervolgens virtueel op een menu-item drukken (zit in een on-click event in een tabel), als ik die document.href die onder die onclick sta direct in m'n browser tik, dan werkt het ook niet.

Als ik het echt allemaal van te voren wist...


  • Yannick
  • Registratie: December 2000
  • Laatst online: 26-03-2024

Yannick

Bub MC

Klinkt als een aardig goed beveiligde site :)
de reden dat het intypen van die URL niet lukt in je browser zou kunnen komen doordat de site die je probeert te scrapen de referer checkt. Deze kun je in je webrequest ook instellen. Echter als je dus die 2e pagina gaat requesten moet je dus ook zorgen dat je de juiste sessie, cookie en form informatie meestuurd, afhankelijk van de mate van beveiliging van de site. Als dat allemaal niet lukt en je kunt het niet achterhalen ahv de broncode van de site, dan raad ik je aan om een sniffer als Ethereal te draaien om te zien wat je browser allemaal heen en weer stuurt en dat na te apen in je webrequests.
succes..

  • Orphix
  • Registratie: Februari 2000
  • Niet online
Inderdaad. Kijk eens naar CookieCollection en CookieContainer (deze moet je eerst instellen voordat je uberhaupt cookies kan ontvangen!). Daarnaast vermoed ik, maar weet het absoluut niet zeker, dat met het javascript stukje de pagina wordt aangeroepen met een query erachter. Probeer uit te vinden hoe die code werkt.
Als je op de 2e pagina zit, wat geeft dan <rechtermuisknop>->Properties(Eigenschappen) aan als de url?
Pagina: 1