» »

ASP.NET + C# vprašanje

ASP.NET + C# vprašanje

Morenov ::

Pozdravljeni.

Ali mogoče kdo ve kako se lahko pridobi html kodo (ali pa to kar vrže ven brskalnik) iz določene spletne strani (na katero je potrebno biti logiran) in jo spraviti v string ali pa textbox???

HttpWebRequest & HttpWebResponse prikažeta login stran namesto željene strani, medtem ko se z iframi in javascriptom ne da tega narediti, ker moraš biti na isti domeni ali na istem serverju. Vsaj ne da bi jaz vedel.

Se komu kaj sanja? Hvala.

Looooooka ::

CredentialCache cc= new CredentialCache();
cc.Add(new Uri("http://www.blabla.com"),"Basic",new NetworkCredential("joze","slak"));
webrequest.Credentials = cc;

Morenov ::

mmmmm... zadeva bi se dalo naredit z iframei preko cross-domaina, vendar mi ne rata najt ustrezne kode. problem je v tem da kode iz zunanje spletne strani (npr. uefa.com) ne morem in nočem spreminjat.

bigbada ::

Preprosto z htmlagiltiy pack.

Morenov ::

bigbada je izjavil:

Preprosto z htmlagiltiy pack.

Kaj si mislil s tem?

FrEaKmAn ::

htmlagiltiy je zelo dobra knjižnica za parsanje HTMLja in je točno to kar ti rabiš...

Morenov ::

žal sem še dokaj n00b in ne vem spisat kode sam od sebe, na googlu pa tudi ne najdem nič kar bi mi lahko pomagalo. Imaš ti kakšen primer kode oz. veš kje bi se ga dalo dobit? Hvala!!

FrEaKmAn ::

Morenov ::

html agility pack je zanimiva zadeva, toda nikjer ne najdem kako se parsanje iframea. Ste ziher da se sploh da?

Morenov ::

edit: Da se bolj zjasnim:
Rad bi dobil html kodo določene eksterne spletne strani. Za dostop na to stran se je potrebno registrirat/logirat. Če seveda nisi logiran te redirecta na login page. S html agility packom, kot z drugimi metodami je možno pridobiti html kodo samo login strani. Kot morebitno rešitev sem pomislil na iframe, vendar je tle problem cross-domain. Če bi lahko pridobil html z iframea bi bil problem rešen. Do drugih zaključkov žal nisem prišel. Upam da sem se dovolj zjasnil. Kaj mi torej preostane? Kakšno rešitev mi predlagate?

FrEaKmAn ::

Torej 2 scenarija

1. Si logiran, greš na želeno stran in jo prebereš, kako to anrdiš, imaš na linkih
2. Nisi logiran in si preusmerjen na login stran (zaznaš redirect). Napolniš formo s podatki ter submitaš ALI pa kar direktno narediš POST na stran, kamor posta login forma. Potem si logiran (verjetno session based ali pa shraniš cookie) in preprosto sparsaš stran.

http://dl.dropbox.com/u/3665437/Notifie...

tukaj je en preprost projekt, ki sem ga nardil nekaj let nazaj. Se poveže na našo učilnico, se logira ter glede za spremembe v podatkih. Upam da ti pomaga...

lp

Morenov ::

Najlepša hvala. Bom pogledal, sprobal in napisal kaj mi je uspelo naredit.
ps: login od tiste strani sicer imam, nisem pa nikjer na netu našel rešitve. html agility pack mi namesto željene strani parsa login stran.

Zgodovina sprememb…

  • spremenil: Morenov ()

FrEaKmAn ::

to da ti parsa je normalno, saj ti stran preusmeri na login...

Morenov ::

mogoče sem še to pozabil omenit, rezultate parsanja oz. html kodo bi rad prikazal na svoji spletni strani in ne v aplikaciji, torej želim narediti spletno stran na kateri bi bilo možno to narediti.

Morenov ::

Preštudiral sem tiste linke, vendar ni to kar potrebujem. Projekt pa mi je totalno tuj :( Google mi tudi ni podal rešitve, čeprav vem da se stvar nekako da izpeljati. Z zadevo sem se začel ukvarjati pred dvemi tedni, več časa ko porabim bolj se mi zdi bedno vreči puško v koruzo 8-O

commissar ::

Zakaj pa se ne prijaviš s HttpWebRequest in HttpWebResponse objektoma na login strani. Tako boš po vsej verjetnosti dobil piškotek, ki ga potem uporabiš pri dostopu do strani, ki zahtevejo prijavo.

Podaj link do stani na keri se moraš logirati (če je javna)

Zgodovina sprememb…

Morenov ::

Sem šele začetnik in se učim, tako da se mi pri veliko stvareh ustavi :8)
http://trophymanager.com

help pliz :O

Zgodovina sprememb…

  • spremenil: Morenov ()

Morenov ::

še vedno nisem napredoval niti za milimeter ;(( očitno rabim n00b-proof pomoč :|

FrEaKmAn ::

ja kaj si že poskusil verjetno.. pokaži kaj si že anredil... lepo korak po korak...

Morenov ::

Vse kar mi uspe naredit je pobrat html iz straneh, ki ne potrebujejo login. Eden izmed načinov:
protected void btnGetHTML_Click(object sender, EventArgs e)
        {
            WebClient MyWebClient = new WebClient();

            Byte[] PageHTMLBytes;
            if (txtURL.Text != "")
            {
                PageHTMLBytes = MyWebClient.DownloadData(txtURL.Text);

                UTF8Encoding oUTF8 = new UTF8Encoding();
                txtPageHTML.Text = oUTF8.GetString(PageHTMLBytes);
            }

_simon_ ::

Lahko si pomagaš tudi s knjižnico WatiN, s katero si pomagaš pri loginu. Na prvi strani imaš primer, več kode itak ne potrebuješ (odpreš stran, napolniš uporabniško ime in geslo, klikneš na gumb).

Nato odklikaš na stran ki te zanima in jo sparsaš, magari z Watin-om ali pa HTML Agility Packom.

Morenov ::

Sem probal malo čarat z WatiNom samo opažam da ni za spletne strani.

FrEaKmAn ::

še enkrat preveri...

Morenov ::

da se popravim: tej primeri, ki so na strani od Watina so za Visual C#, nikakor jih pa ne uspem adaptirat na spletno stran.

Morenov ::

torej smo rekli:
1. login na stran
2. parse html

tole sem spackal:
using System;
using System.Web;
using System.Net;
using System.IO;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace SiteZaTeste
{
    public partial class LoginToPage : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create("http://forum.tntvillage.scambioetico.org/tntforum/index.php?act=Login&CODE=00");
            req.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.0.3705;)";
            req.Method = "POST";
            req.Accept = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8";
            req.Headers.Add("Accept-Language: en-us,en;q=0.5");
            req.Headers.Add("Accept-Encoding: gzip,deflate");
            req.Headers.Add("Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7");
            req.KeepAlive = true;
            req.Headers.Add("Keep-Alive: 300");
            req.Referer = "http://forum.tntvillage.scambioetico.org/tntforum/index.php?act=Login&CODE=00";

            req.ContentType = "application/x-www-form-urlencoded";

            String username = "ASP.NET";
            String password = "slotech";

            StreamWriter sw = new StreamWriter(req.GetRequestStream());
            //sw.Write("application=portal&url=http://forum.tntvillage.scambioetico.org/tntforum/index.php?s=e0184b39fdc3c4b988560adfd2e6e8ba&act=Login&CODE=00/redirect;jsessionid=1C568AAA1FB8B5C757CF5F68BE6ECE65?type=ssologin&url=/portal/show;jsessionid=1C568AAA1FB8B5C757CF5F68BE6ECE65?idc=1023278&realm=sso&userid=" + username + "&password=" + password + "&x=16&y=11");
            sw.Write("application=portal&url=http%3A%2F%2Fforum.tntvillage.scambioetico.org%2Ftntforum%2Findex.php%3Fs%3de0184b39fdc3c4b988560adfd2e6e8ba&act%3dLogin&CODE%3d00%2Fredirect%3Bjsessionid%3d1C568AAA1FB8B5C757CF5F68BE6ECE65%3Ftype%3dssologin&url%3d%2Fportal%2Fshow%3Bjsessionid%3d1C568AAA1FB8B5C757CF5F68BE6ECE65%3Fidc%3d1023278&realm=sso&userid=" + username + "&password=" + password + "&x=16&y=11");
            sw.Close();

            HttpWebResponse response = (HttpWebResponse)req.GetResponse();


            StreamReader reader = new StreamReader(response.GetResponseStream());
            string tmp = reader.ReadToEnd();

            foreach (Cookie cook in response.Cookies)
            {
                tmp += "\n" + cook.Name + ": " + cook.Value;
            }


            Response.Write(tmp);
            Response.End();
        }
    }
}
dobim pa hieroglife ven in spet ne vem zakaj je tako :(

Zgodovina sprememb…

  • spremenil: Morenov ()

Morenov ::

protected void Page_Load(object sender, EventArgs e)
        {
            WebClient req = new WebClient();

            CredentialCache myCache = new CredentialCache();
            //myCache.Add(new Uri("http://www.abcdef.org/login.php"), "Basic", new NetworkCredential("uime", "geslo"));
            myCache.Add(new Uri("http://www.abcdef.org/login.php"), "Digest", new NetworkCredential("uime", "geslo"));

            req.Credentials = myCache;

            string results;
            results = System.Text.Encoding.UTF8.GetString(req.DownloadData("http://www.abcdef.si/login.php?id=2923"));
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            string TheUrl = "http://www.abcdef.org/details.php?id=2923";
            string response = GetHtmlPage(TheUrl);
            TextBox2.Text = response;
        }




Nekoliko bolj konkreten primer, ki pa seveda ne deluje.
Kaj delam narobe?:'(

Zgodovina sprememb…

  • spremenil: Morenov ()

darkolord ::

Glede na URL (login.php) sklepam, da stran ne uporablja HTTP avtentikacije, ampak na nivoju aplikacije. Po domače povedano, poiskat moraš imena polj za uporabniško ime in geslo in jih poslat v requestu.

Morenov ::

recimo da so imena polj:
uime = aaa
geslo = bbb
Kako moram spremenit request?

darkolord ::

NameValueCollection postData = new NameValueCollection();
postData.Add("uime", "aaa");
postData.Add("geslo", "bbb");
req.UploadValues(uri, postData);

Morenov ::

Torej:
WebClient req = new WebClient();

            CredentialCache myCache = new CredentialCache();
            myCache.Add(new Uri("http://www.abcdef.org/login.php"), "Basic", new NetworkCredential("uime", "geslo"));
            
            NameValueCollection postData = new NameValueCollection();
            postData.Add("uime", "aaa");
            postData.Add("geslo", "bbb");
            req.UploadValues("http://www.abcdef.org/login.php", postData);

            req.Credentials = myCache;

            string results;
            results = System.Text.Encoding.UTF8.GetString(req.DownloadData("http://www.abcdef.org/login.php"));


Zadeva mi ne dela :(

Zgodovina sprememb…

  • spremenil: Morenov ()

Morenov ::

sprobal sem še nekaj novih primerov, ampak ni šans da se mi rata logirat. vsi pravijo da je simple kot pasulj a na netu ni nobenega konkretnega primera :'(

Mavrik ::

Daj zalaufi en FireBug/developer konzolo v chromeu, se prijavi v tisto stran pa poglej kaj se sploh pošlje tja (cookiji, post spremeljivke etc.) in to repliciraj. Ne pa da v temo brcaš :)
The truth is rarely pure and never simple.

Morenov ::

Uporabljam Opero. Stran na katero se hočem trenutno logirat ni moja ciljna stran. Sem si pač izbral eno .php stran s pomočjo katere delam poizkus logina, ko in če mi uspe na tej strani se bom lotil željene strani.

Morenov ::

Zgodovina sprememb…

  • spremenil: Morenov ()

Morenov ::

S pomočjo tega sem našel rešitev: VB.NET Tutorial 51 - HttpWebRequest POST Method (Part 1) (Visual Basic 2008/2010)
Sedaj je na vrsti parsanje...

Zgodovina sprememb…

  • spremenil: Morenov ()


Vredno ogleda ...

TemaSporočilaOglediZadnje sporočilo
TemaSporočilaOglediZadnje sporočilo
»

[C# asp.NET web forma] Kam zgine cookie oz. zkj se izbriše?

Oddelek: Programiranje
61063 (877) Morenov
»

Avtomatično prepoznati POST spremenljivke

Oddelek: Programiranje
121508 (1301) AnonimkeOP
»

[C#] Simobilov Glasnik

Oddelek: Programiranje
134249 (1329) Mrch
»

[C#] WebResponse vrne error 404

Oddelek: Programiranje
5989 (950) darkolord
»

HTTP POST

Oddelek: Programiranje
231696 (1472) kopernik

Več podobnih tem