Avatar billede offenbach1 Mester
14. januar 2023 - 12:30 Der er 19 kommentarer og
2 løsninger

Hjælp til kode i c#

Hej jeg coder i c# jeg prøver af få info ud fra en hjemme side
den her kode dur på næste alle andre sider med lide den her side der kommer der en fejl op

System.Net.WebException: 'Fjernserveren returnerede en fejl: (403) Forbudt.'

har prøvet 1000 ting men uden held håber der er nogen der derude der kan hjælpe

mvh offenbach


Hjemmeside link = "https://subscene.com/"


private void button1_Click(object sender, EventArgs e)
        {

            string html = string.Empty;

            ServicePointManager.Expect100Continue = true;
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls
                  | SecurityProtocolType.Tls11
                  | SecurityProtocolType.Tls12
                  | SecurityProtocolType.Ssl3;

            HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://subscene.com/");


            request.AutomaticDecompression = DecompressionMethods.GZip;

            using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
            using (Stream stream = response.GetResponseStream())
            using (StreamReader reader = new StreamReader(stream))
            {
                html = reader.ReadToEnd();
            }
            richTextBox1.Text = html;
            //  Console.WriteLine(html);
        }

____________________________________________________



System.Net.WebException: 'Fjernserveren returnerede en fejl: (403) Forbudt.'
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 13:08 #1
Det pågældende website kræver (vistnok) TLS 1.3 - og fra og med .Net 4.8 er det (vistnok) med i C#.
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 13:16 #2
Nå, subscene.com tillader if'ølge https://www.cdn77.com/tls-test også 1.2 - som din kode skulle kunne bruge...
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 13:25 #3
Nuvel - subscene.com anvender Cloudflare, som er kendt for af og til at spørge om du er et menneske eller en robot. Dit program er tydeligvis en robot, og bliver måske afvist af samme årsag.
Avatar billede offenbach1 Mester
14. januar 2023 - 13:40 #4
har prøvet af tilføje TLS 1.3 det hjælp ikke nogen ide til det med Cloudflare hvordan man kommer udeom det ???  hvis det er derfor det ikke dur

mvh offenbach
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 14:00 #5
"Hvis det er derfor" ... det er lige spørgsmålet når fejlbeskeden er så generel ;)

Men derfor er det også sjovt. Cloudflare skriver at en 403 ikke behøver komme fra Cloudflare selv.

Med et lille Python script der forsøger at hente https://subscene.com/ får jeg også "HTTP Error 403: Forbidden"

Måske subscene slet ikke kan lide robotter (web-scrapers...)?

Jeg kigger lidt videre.
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 14:07 #6
Jamen, den side vil have en User-Agent - og måske een der ligner en rigtig browser. Jeg havde ikke lyst til at ødelægge en ellers god lørdag med at starte en Windows op, så eksperimentet er i Python på Linux, men ideen er ret sikker det samme. I koden nedenfor tilføjer jeg en "tilfældig" User-Agent, og så får jeg noget der ligner deres startside. Du kan sikkert gøre det samme i C#

import urllib.request

req = urllib.request.Request(
    "https://subscene.com/",
    data=None,
    headers={
        'User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36'
    }
)

page = urllib.request.urlopen(req)
print(page.read())
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 14:14 #7
Og reaktionen med 403 siges at kunne komme fra: "The host site rejection is coming from the OWASP ModSecurity Core Rules for Apache mod-security. Rule 900002 has a list of "bad" user agents".

Det er lidt "security by obscurity" at prøve at frasortere robotter på den måde, når det tilsyneladende så nemt kan omgås.
Avatar billede offenbach1 Mester
14. januar 2023 - 14:55 #8
ja ok prøver lige af rude med de oplysninger jeg af dig 1000 tak
Avatar billede arne_v Ekspert
14. januar 2023 - 14:57 #9
Og det må være:

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://subscene.com/");
request.UserAgent ="User-Agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36";

i C#.
Avatar billede arne_v Ekspert
14. januar 2023 - 14:58 #10
Ups. Fik ikke slettet nok.

HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://subscene.com/");
request.UserAgent ="Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/35.0.1916.47 Safari/537.36";
Avatar billede arne_v Ekspert
14. januar 2023 - 14:59 #11
Hvis du kører på Windows skulle du måske vælge en Windows browser id fremfor en Mac browser id.
Avatar billede offenbach1 Mester
14. januar 2023 - 15:07 #12
hej ja jeg køre windows jeg prøver lige det her tak
Avatar billede offenbach1 Mester
14. januar 2023 - 15:18 #13
har lige prøvet det her men det virkrt heller ik


HttpWebRequest request = (HttpWebRequest)WebRequest.Create("https://subscene.com/");
            request.UserAgent = "user - agent" + "Mozilla / 4.0(compatible; MSIE 6.0; " +
                                  "Windows NT 5.2; .NET CLR 1.0.3705";


jeg bruger windows 7 og 10 en der nogen spicel til dem ??

mvh offenbach
Avatar billede erikjacobsen Ekspert
14. januar 2023 - 15:52 #14
Når du skriver af fra et løsningsforslag, så gør det rigtigt. Ikke "user - agent"  men "User-Agent".

Men læg mærke til Arnes rettelse i #10.
Avatar billede offenbach1 Mester
14. januar 2023 - 16:36 #15
har fundet en der virker nu tak for alt hjælpen her inde

SVAR TIL ANDER

TRÅDEN ER LUKKET

-------------------------------------------------------------------

  String responseBody = "";
            String requestString = "https://subscene.com/";

            try
            {
                //Make the request
                var request = (HttpWebRequest)WebRequest.Create(requestString);

                request.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)";
                request.Timeout = 15000;
                request.Method = "GET"; //GET, POST
                request.Accept = "application/json";
                request.ContentType = "application/json; charset=utf-8";

                using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
                {
                    var stream = response.GetResponseStream();
                    using (var reader = new StreamReader(stream))
                    {
                        try
                        {
                            responseBody = reader.ReadToEnd();
                            reader.Close();
                        }
                        catch { }
                    }
                    response.Close();
                    response.Dispose();
                    responseBody = responseBody.ToLower();
                }
            }
            catch (WebException ex)
            {
                //Show Error
                MessageBox.Show(ex.ToString());
            }

            richTextBox1.Text = responseBody;
          //  MessageBox.Show(responseBody);
Avatar billede 220661 Ekspert
14. januar 2023 - 16:51 #16
Hvis du har fået brugbar hjælp bør du med de løsnings forslag der  er er kommet markere disse så man kan se hvad der hjælp dig. Det er faktisk ikke særligt svært.  Ud fra hvert indlæg kan du markere om de bidrog til løsningen.
Avatar billede 220661 Ekspert
14. januar 2023 - 16:53 #17
Der lægges jo ikke svar som man gjorde før i tiden. I dag er det spørger der vælter hvilke indlæg der har bidraget med løsning.
Avatar billede 220661 Ekspert
14. januar 2023 - 17:12 #18
Tak👍
Avatar billede arne_v Ekspert
14. januar 2023 - 19:30 #19
#15

Har du brug for:

request.Accept = "application/json";
request.ContentType = "application/json; charset=utf-8";

?

ContentType giver kun mening med POST og PUT ikke med GET.

Accept med application/json bruges normalt ved kald til web service ikke ved kald til web side.
Avatar billede arne_v Ekspert
14. januar 2023 - 19:35 #20
#15

Hvis data kun skal læses uden videre så er WebClient nok nemmere end WebRequest.

WebClient cli  = new WebClient();
cli.Header["User-Agent"] = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0)";
string response = cli.DownloadString("https://subscene.com/");

Utestet!!
Avatar billede offenbach1 Mester
14. januar 2023 - 21:24 #21
det dur også fedt det er meget nemmer med WebClient
1000 tak
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

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



IT-JOB

REMA 1000

Cloud-specialist

Cognizant Technology Solutions Denmark ApS

Senior Delivery Manager