Search code examples
c#httprequestrestsharp

Request works in python but doesn't in C#


I have the following GET request in python:

  url = "https://web.trf3.jus.br/certidao/Certidao/Solicitar"

  payload={}
  headers = {
    'authority': 'web.trf3.jus.br',
    'accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9',
    'accept-language': 'pt-BR,pt-PT;q=0.9,pt;q=0.8,en-US;q=0.7,en;q=0.6',
    'cache-control': 'max-age=0',
    'sec-ch-ua': '"Chromium";v="104", " Not A;Brand";v="99", "Google Chrome";v="104"',
    'sec-ch-ua-mobile': '?0',
    'sec-ch-ua-platform': '"Windows"',
    'sec-fetch-dest': 'document',
    'sec-fetch-mode': 'navigate',
    'sec-fetch-site': 'none',
    'sec-fetch-user': '?1',
    'upgrade-insecure-requests': '1',
    'user-agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36'
  }

  response = requests.request("GET", url, headers=headers, data=payload)

It works fine. However, when I try to do the same request in C# using RestSharp, I always get timeout errors. The request never completes successfully.

var request = new RestRequest("https://web.trf3.jus.br/certidao/Certidao/Solicitar", Method.Get);
request.AddHeader("authority", "web.trf3.jus.br");
request.AddHeader("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
request.AddHeader("accept-language", "pt-BR,pt-PT;q=0.9,pt;q=0.8,en-US;q=0.7,en;q=0.6");
request.AddHeader("cache-control", "max-age=0");
request.AddHeader("sec-ch-ua", "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"");
request.AddHeader("sec-ch-ua-mobile", "?0");
request.AddHeader("sec-ch-ua-platform", "\"Windows\"");
request.AddHeader("sec-fetch-dest", "document");
request.AddHeader("sec-fetch-mode", "navigate");
request.AddHeader("sec-fetch-site", "none");
request.AddHeader("sec-fetch-user", "?1");
request.AddHeader("upgrade-insecure-requests", "1");
request.AddHeader("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");

Solution

  • While it does not answer the question why, the following works well using Flurl, which is my personal preference for http calls:

    using Flurl.Http;
    
    namespace Program
    {
        public static class Program
        {
            static async Task Main()
            {
                var url = "https://web.trf3.jus.br/certidao/Certidao/Solicitar";
    
                var headers = new Dictionary<string, string>();
                headers.Add("authority", "web.trf3.jus.br");
                headers.Add("accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9");
                headers.Add("accept-language", "pt-BR,pt-PT;q=0.9,pt;q=0.8,en-US;q=0.7,en;q=0.6");
                headers.Add("cache-control", "max-age=0");
                headers.Add("sec-ch-ua", "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"");
                headers.Add("sec-ch-ua-mobile", "?0");
                headers.Add("sec-ch-ua-platform", "\"Windows\"");
                headers.Add("sec-fetch-dest", "document");
                headers.Add("sec-fetch-mode", "navigate");
                headers.Add("sec-fetch-site", "none");
                headers.Add("sec-fetch-user", "?1");
                headers.Add("upgrade-insecure-requests", "1");
                headers.Add("User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36");
    
                var result = await url.WithHeaders(headers).GetStringAsync();
            }
        }
    }
    

    This works too using RestSharp (have you forgotten await by any chance?)

    using Flurl.Http;
    using RestSharp;
    
    namespace Program
    {
        public static class Program
        {
            static async Task Main()
            {
                var url = "https://web.trf3.jus.br/certidao/Certidao/Solicitar";
    
                var headers = new Dictionary<string, string>
                {
                    { "authority", "web.trf3.jus.br" },
                    { "accept", "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9" },
                    { "accept-language", "pt-BR,pt-PT;q=0.9,pt;q=0.8,en-US;q=0.7,en;q=0.6" },
                    { "cache-control", "max-age=0" },
                    { "sec-ch-ua", "\"Chromium\";v=\"104\", \" Not A;Brand\";v=\"99\", \"Google Chrome\";v=\"104\"" },
                    { "sec-ch-ua-mobile", "?0" },
                    { "sec-ch-ua-platform", "\"Windows\"" },
                    { "sec-fetch-dest", "document" },
                    { "sec-fetch-mode", "navigate" },
                    { "sec-fetch-site", "none" },
                    { "sec-fetch-user", "?1" },
                    { "upgrade-insecure-requests", "1" },
                    { "User-Agent", "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/104.0.0.0 Safari/537.36" }
                };
    
                var client = new RestClient();
    
                var request = new RestRequest(url,Method.Get);
                request.AddHeaders(headers);
    
                var result = await client.ExecuteAsync(request);
            }
        }
    }