Avatar billede huusom Nybegynder
06. oktober 2003 - 20:03 Der er 22 kommentarer og
1 løsning

En lang url laver fejl.

Jeg skal have denne stump kode til at hente fra nedenstående URL... men.....

Hvis URL'en står som den gør laver den fejl.
Men hvis jeg bare skriver www.tips.dk kan den godt...

What to do?

public string DoSocketGet(string server)
        {
            //Sets up variables and a string to write to the server
            Encoding ASCII = Encoding.ASCII;
           
            string Get = "GET / HTTP/1.1\r\nHost: " + server +
                "\r\nConnection: Close\r\n\r\n";
            Byte[] ByteGet = ASCII.GetBytes(Get);
            Byte[] RecvBytes = new Byte[2048];
            String strRetPage = null;

            // IPAddress and IPEndPoint represent the endpoint that will
            //  receive the request.
            // Get the first IPAddress in the list using DNS.
            IPAddress hostadd = Dns.Resolve(server).AddressList[0];
            IPEndPoint EPhost = new IPEndPoint(hostadd, 80);

            //Creates the Socket for sending data over TCP.
            Socket s = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
                ProtocolType.Tcp );

            // Connects to the host using IPEndPoint.
            s.Connect(EPhost);
            if (!s.Connected)
            {
                strRetPage = "Unable to connect to host";
                return strRetPage;
            }

            // Sends the GET text to the host.
            s.Send(ByteGet, ByteGet.Length, SocketFlags.None);

            // Receives the page, looping until all bytes are received
            Int32 bytes = s.Receive(RecvBytes, RecvBytes.Length, 0);
            strRetPage = "Default HTML page on " + server + ":\r\n";
            strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);

            while (bytes > 0)
            {
                bytes = s.Receive(RecvBytes, RecvBytes.Length, SocketFlags.None);
                strRetPage = strRetPage + ASCII.GetString(RecvBytes, 0, bytes);
            }

            return strRetPage;
        }

        private void button1_Click(object sender, System.EventArgs e)
        {
            label1.Text = DoSocketGet("www.tips.dk/spil/lotto/indhold/resultater");
        }
Avatar billede dawin_dk Nybegynder
06. oktober 2003 - 20:06 #1
du henter forkert ..

string Get = "GET / HTTP/1.1\r\nHost: " + server +
                "\r\nConnection: Close\r\n\r\n";

med en lang url vil du bede om at få file : / .. på en server der hedder noget langt... det skal den ikke ... henter du underfil skal det give det her resultat:


GET /spil/lotto/indhold/resultater HTTP/1.1\r\nHost: www.tips.dk\r\nConnection: Close\r\n\r\n

ikke som du gør nu:

GET / HTTP/1.1\r\nHost: www.tips.dk/spil/lotto/indhold/resultater\r\nConnection: Close\r\n\r\n
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:07 #2
1)  www.tips.dk er ikke nem at lave screen scraping fra

2)  det er nemmere at lave det fra www.dr.dk

3)  du behøver ike at bruge sockets - der er faktisk klasser til ta lave web
    mee
Avatar billede bearhugx Nybegynder
06. oktober 2003 - 20:07 #3
læg mærke til at dit kald så vil være
GET / HTTP/1.1
Host: www.tips.dk/spil/lotto/indhold/resultater
:
:

og det hører jo ingen steder hjemme...
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:08 #4
Eksempel:

using System;
using System.IO;
using System.Net;

class MainClass
{
    public static void Main(string[] args)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.dr.dk/cgi-bin/fttx1.exe/281");
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stm = resp.GetResponseStream();
        int c;
        string res = "";
        while((c = stm.ReadByte()) >= 0) {
                res += (char)c;
        }
        stm.Close();
        resp.Close();
        Console.WriteLine(res);
    }
}
Avatar billede nielslbeck Nybegynder
06. oktober 2003 - 20:08 #5
Ville det ikke være en del lettere bare at bruge HttpWebRequest???
Avatar billede bearhugx Nybegynder
06. oktober 2003 - 20:08 #6
arne_v >> screen-scraping..??? ... ved du mere end os andre vedr. dette spørgsmål ?
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:09 #7
Erstat 281 med 291 for at få lotto tallene !
Avatar billede bearhugx Nybegynder
06. oktober 2003 - 20:11 #8
hmmm .. jeg kunne forestille mig at sådanne indformationer ville være nemmest tilgængelige, hvis der var en getLottoTal webservice hos tips.dk ... er der nogen der ved, om en således findes...
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:13 #9
Nej.

Men hvis dette her ikke er screen-scraping hvad er screen-scraping så ?
Avatar billede bearhugx Nybegynder
06. oktober 2003 - 20:16 #10
det var nu mere en forklaring af screen-scraping jeg gik efter- men jeg tror jeg begynder at forstå hvad det handler om -- jeg har dog altid hørt det omtalt som web-ripping, men sådan er der jo så meget :-)
Avatar billede huusom Nybegynder
06. oktober 2003 - 20:17 #11
Ja... Arne_V har før prøvet at hjælpe mig bare med C++....

Men vil jeg kunne hive de enkelte tal ud og bruge dem som variabler?
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:21 #12
screen scraping er nå man hapser en HTML side fra et program.
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:23 #13
Ja - jeg ved godt at du vil have tallene.

Men den problem stilling er jo den samme for dine 30 linier
eller mine 10 linier.

Du står med en string og skal fiske tallene ud af den.

Du har kaldt den strRetPage - jeg har kaldt den res - forskellen er ens.
Avatar billede huusom Nybegynder
06. oktober 2003 - 20:26 #14
Men jeg bruger Arne's løsning for den kan jeg bedst overskue og forstå.
Jeg er jo kun lige begyndt at programmere "rigtigt"

Men tak for hjælpen alle sammen.
Avatar billede arne_v Ekspert
06. oktober 2003 - 20:34 #15
En version der er kommet lidt længere:

using System;
using System.IO;
using System.Net;

class MainClass
{
    public static void Main(string[] args)
    {
        HttpWebRequest req = (HttpWebRequest)WebRequest.Create("http://www.dr.dk/cgi-bin/fttx1.exe/291");
        HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
        Stream stm = resp.GetResponseStream();
        int c;
        string res = "";
        while((c = stm.ReadByte()) >= 0) {
                res += (char)c;
        }
        stm.Close();
        resp.Close();
        int ix = res.IndexOf("VINDERTAL:");
        while(res[ix] != '\n') ix++;
        ix++;
        while(res[ix] != '\n') ix++;
        ix++;
        int ix2 = ix;
        while(res[ix2] != '\n') ix2++;
        string nbrs = res.Substring(ix, ix2-ix);
        Console.WriteLine(nbrs);
    }
}
Avatar billede odegaard Nybegynder
07. oktober 2003 - 00:28 #16
Ikke for at bitche, men er du nu sikker på at det du vil er lovligt? Med andre ord, har du fået lov at "stjæle" fra de sites?
Avatar billede arne_v Ekspert
07. oktober 2003 - 00:37 #17
Det kan vel ikke være ulovligt at hente en web side.

Det er jo ligesom hele formålet med web sider - at folk henter dem.

Og hvad folk henter dem med og om folk læser hele siden eller kun
dele deraf må også være folks egen sag.

Det bliver først tvivlsomt hvis de screen scrapede data publiseres
igen.
Avatar billede odegaard Nybegynder
07. oktober 2003 - 00:43 #18
Det er bestemt ikke lovligt at hente en webside, pille dele ud af den, for at derefter at præsentere det man ønsker i sin egen applikation eller webside.

Fx. kan man læse følgende på www.tips.dk:
"Det er ikke tilladt, uden at indhente skriftlig tilladelse fra Dansk Tipstjeneste AS, at kopiere, videreformidle eller sælge indholdet fra dette domæne."
Avatar billede arne_v Ekspert
07. oktober 2003 - 07:44 #19
web-side : nej
applikation : ja (ellers er det nemlig også ulovligt at se siden i internet explorer)
Avatar billede nielslbeck Nybegynder
07. oktober 2003 - 07:59 #20
arne_v>> Du kan ikke bare sige at man må i applikationer blot fordi man ellers ikke måtte se siden i IE. I IE får man jo vist hele siden i sin helhed som det var meningen den skulle vises (i hvert fald i teorien), men du, hvis du klipper i siden først, jo ikke viser hele siden i din applikation. Det samme gælder vel websider. Hvis du linker til en side, eller viser den i en frame, er det helt okay - men begynder du blot at vise det indhold du selv har lyst til, er det en helt anden sag!
Avatar billede odegaard Nybegynder
07. oktober 2003 - 08:08 #21
Problemet er vel ikke så stort. Man kan jo bare skrive til tips og spørge hvad de synes (jeg tror nu nok jeg ved hvad svaret bliver).
Avatar billede arne_v Ekspert
07. oktober 2003 - 08:17 #22
Hvad er det for en synspunkt.

En browser sender en HTTP request efter en URL og får nogle data som den
gør et eller andet med.

Om den viser alt, viser alt men ikke fortolker JavaScript, viser alt
men ikke viser link til reklamer, eller viser hver andet ord eller
viser en sætning i midten har web siten ikke noget at skulle have sagt
over. De har givet tilladelse til at man kan hente og se siden. Og
den kan ikke balnde sig i hvordan man gør det.

Forfattere har heller ikke ret til at bestemme hvordan man vil læse
en bog. Og man evt. kun vil læse afslutningen.

Det kritiske er publisering. Man har ikke lov til at viderepublisere
fra sin egen web side.

For at vende tilbage til bog analogien: man må læse sin bog som man
vil men begynder man at tage fotokopier af den og give dem til andre
så falder hammeren.

Og det er iøvrigt ikke nødvendigvis loligt at linke eller frame til
andres sider. Jævnfør f.eks. den meget omtalte NewsBooster sagen.
Avatar billede arne_v Ekspert
07. oktober 2003 - 08:19 #23
Hvad vil du spørge DT om:
  - om de mener at have ret til at bestemme hvilke browsere man må bruge
    og hvordan de skal virke når man ser deres web side ?
  - om man må overtræde forbudet mod videre formodling af deres sider ?

Svaret på begge er vel ret åbenlyst !
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester