Używam poniższego kodu, aby uzyskać źródło strony, ale nie zwraca danych właściwości:

string url = "http://www.tsetmc.com/Loader.aspx?ParTree=15131F";
            WebClient client = new WebClient();
            client.Headers["Accept-Encoding"] = "gzip";
            string pageSource = client.DownloadString(url);

Kodowanie treści witryny jest GZIP

image

1
SajjadZare 6 styczeń 2020, 08:16

1 odpowiedź

Najlepsza odpowiedź

Ustawiając client.Headers["Accept-Encoding"] = "gzip"; pytasz serwer, aby wysłać skompresowaną odpowiedź. Jednak nie zdekompresujesz go. To powoduje nieprawidłową odpowiedź.

Zgodnie z https://stackoverflow.com/a/4914874/23633, możesz automatycznie uzyskać dekompresuj odpowiedzi, modyfikując HttpWebRequest tworzy:

class MyWebClient : WebClient
{
    protected override WebRequest GetWebRequest(Uri address)
    {
        var request = (HttpWebRequest) base.GetWebRequest(address);
        request.AutomaticDecompression = DecompressionMethods.Deflate | DecompressionMethods.GZip;
        return request;
    }
}

string url = "http://www.tsetmc.com/Loader.aspx?ParTree=15131F";
WebClient client = new MyWebClient();
// don't set the Accept-Encoding header here; it will be done automatically
string pageSource = client.DownloadString(url);
2
Bradley Grainger 6 styczeń 2020, 06:32