Quote Originariamente inviata da U235 Visualizza il messaggio
Ciao Luisa,
per fare quello che vuoi tu, visto che ricevi i dati via json, devi chiamare direttamente la fonte dei dati, non la pagina stessa.
In questo caso (il primo link) se fai un controllo con fiddler ti accorgerai che al click sulla ricerca (o chiamando il link alla pagina con i parametri) i dati vengono caricati da "http://www.albonazionalegestoriambientali.it/Services/GetRicerche.asmx/GetImpresePerSezioneProvincia", con una chiamata POST. Quindi puoi tranquillamente utilizzare una HttpWebRequest per fare altrettanto. Ad esempio :

codice:
public class JSONDataReader
    {
        public class Result
        {
            public Content d { get; set; }
        }
        public class Content
        {
            public int NumeroRecordTotali { get; set; }
            public List<Imprese> ListaImprese { get; set; }
        }
        public class Imprese
        {
            public string Cap { get; set; }
            public string Categorie { get; set; }
            public string CodiceFiscale { get; set; }
            public string Comune { get; set; }
            public string Denominazione { get; set; }
            public string IdImpresa { get; set; }
            public string NumeroIscrizione { get; set; }
            public string Progressivo  { get; set; }
            public string ProvinciaIscrizione{ get; set; }
            public string Sezione{ get; set; }
            public string SiglaProvincia{ get; set; }
            public string Via{ get; set; }
        }
       
        public JSONDataReader(string url,string parameters,string fileName)
        {
            SendRequest<Result>((Result, err) =>
            {
                if (err != null)
                    return;
                var imprese = Result.d.ListaImprese;
                //imprese contiene i dati estrappolati.


                Type type = typeof(Imprese);
                var properties = type.GetProperties();
                var names = properties.Select(s => s.Name);
                var header = string.Join(";", names);
                var sb = new StringBuilder(header);
                sb.Append(Environment.NewLine);
                foreach (var impresa in imprese)
                {
                    foreach (var name in names)
                    {
                        var pi = properties.Single(s => s.Name == name);
                        sb.Append(pi.GetValue(impresa));
                        sb.Append(";");
                    }
                    sb.Append(Environment.NewLine);
                }
                File.WriteAllText(fileName, sb.ToString());
            },
            url,
            parameters);
        }


        public static void SendRequest<T>(Action<T, Exception> action, string url, string objJson)
        {
            string responseString = string.Empty;
            byte[] byteArray = Encoding.UTF8.GetBytes(objJson);
            var request = (HttpWebRequest)WebRequest.Create(url);
            request.Method = "POST";
            request.ContentType = "application/json";
            request.BeginGetRequestStream(new AsyncCallback((asynchronousResult) =>
            {
                HttpWebRequest req1 = (HttpWebRequest)asynchronousResult.AsyncState;
                Stream postStream = req1.EndGetRequestStream(asynchronousResult);
                postStream.Write(byteArray, 0, objJson.Length);
                postStream.Dispose();
                req1.BeginGetResponse(new AsyncCallback((asynchronousResult1) =>
                {
                    try
                    {
                        HttpWebRequest req2 = (HttpWebRequest)asynchronousResult1.AsyncState;
                        HttpWebResponse response = (HttpWebResponse)req2.EndGetResponse(asynchronousResult1);
                        Stream streamResponse = response.GetResponseStream();
                        StreamReader streamRead = new StreamReader(streamResponse);
                        responseString = streamRead.ReadToEnd();
                        T result = (T)Newtonsoft.Json.JsonConvert.DeserializeObject(responseString, typeof(T));
                        action(result, null);
                        streamResponse.Dispose();
                        streamRead.Dispose();
                        response.Dispose();
                    }
                    catch (WebException e)
                    {
                        action(default(T), e);
                    }


                }), request);
            }), request);
        }
    }
Questa classe recupera i dati delle imprese e crea un csv contenente i dati incolonnati. E la usi così:
codice:
new JSONDataReader(
                "http://www.albonazionalegestoriambientali.it/Services/GetRicerche.asmx/GetImpresePerSezioneProvincia",
                "{\"lang\":\"it\",\"siglaProvincia\":\"SS\",\"idRegione\":\"20\",\"includiCP\":\"false\",\"paginaCorrente\":\"1\",\"risultatiPerPagina\":\"50\"}",
                "test.csv");
Ciao U235, grazie davvero per la risposta molto professionale. Scusa l'ignoranza ma non conosco bene json. La classe da te postata la posso mettere direttamente in una pagina PHP (uso questo linguaggio)? grazie ancora