Avatar billede meganight Nybegynder
07. maj 2013 - 10:07 Der er 1 løsning

The request was aborted: The connection was closed unexpectedly (Is til den der finder fejlen)

Jeg har et super irriterende problem, med en side hvorfra jeg vil snuppe HTML'en men returnere overstående fejl.

Siden jeg forsøger at hente er:
http://achievementhunter.com/games/farcry3blooddragon/
Og generelt alle efter ".com/games/(Indsæt Navn Her)", og den fejler på alle.

Mit projekt er på Windows Phone 7.1, .NET 4.0, og jeg forsøgte mig først med HTMLAgilityPack, men fik så den fejl, efter lidt test i mobil browseren så jeg den heller ikke gad indlæse siden.
Tænkte derfor det muligvis kunne fikses over en WebService (WCF), med httpwebrequest eller WebClient, de fejler dog også begge to.

Jeg har kigget lidt i Fiddler og den returnere:
"The server did not return properly formatted HTTP Headers."
"With Rare exceptions, servers must include a DATE resposne header."
http://web-sniffer.net/ har dog ikke de store problemer med siden, med mindre jeg henter det i "HTTP/1.0 (without Host header)"

Under sider på sitet fungere fint, og kan sagtens returnere data derfra.
Understående kode fejler, når jeg køre den mod siden, men fungere mod andre sider.

        public static string GetPage(string uri)
        {
            HttpWebRequest request = (HttpWebRequest)WebRequest.Create(uri);
            request.Timeout = 12500;

            // Set some reasonable limits on resources used by this request
            request.MaximumAutomaticRedirections = 4;
            request.MaximumResponseHeadersLength = 4;
            request.UserAgent = "Mozilla/5.0 (Windows NT 6.2; WOW64; rv:20.0) Gecko/20100101 Firefox/20.0";
            request.KeepAlive = true;
            // Set credentials to use for this request.
            request.Credentials = CredentialCache.DefaultCredentials;
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();


            // Get the stream associated with the response.
            Stream receiveStream = response.GetResponseStream();


            // Pipes the stream to a higher level stream reader with the required encoding format.
            StreamReader readStream = new StreamReader(receiveStream, Encoding.UTF8);

            string htmlreturn = readStream.ReadToEnd();

            response.Close();
            readStream.Close();

            return htmlreturn;
        }

Jeg gir en is eller en is kold øl til ham/hende der kan hjælpe mig med dette problem, mange tak :)
Avatar billede meganight Nybegynder
07. maj 2013 - 11:14 #1
Jeg har brugt en hel dag på dette problem, og så dumper denne løsning ind fra venstre.

Ved at køre koden med protocol HTTP 1.0 og så fange exceptionen, så ligger min HTML faktisk inde i det object.
Yderst frusterende, men løst da.

Her er koden til det.

public static string GetPage(string uri)
        {
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(uri);
            myRequest.ProtocolVersion = HttpVersion.Version10;

            try
            {
                using (WebResponse response = myRequest.GetResponse())
                {
                    Console.WriteLine("Won't get here");
                }
            }
            catch (WebException e)
            {
                using (WebResponse response = e.Response)
                {
                    HttpWebResponse httpResponse = (HttpWebResponse)response;
                    Console.WriteLine("Error code: {0}", httpResponse.StatusCode);
                    using (Stream data = response.GetResponseStream())
                    using (var reader = new StreamReader(data))
                    {
                        string text = reader.ReadToEnd();
                        return text;
                    }
                }
            }
        }
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
Kurser inden for grundlæggende programmering

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