2009-07-03 6 views
0

J'ai écrit un petit grattoir qui est censé ouvrir une connexion à un script PHP sur un serveur distant via HTTP et pomper du code XML qu'il trouve dans un fichier local.Problème avec la récupération de XML via HTTP et l'écriture dans le fichier

Pas exactement la science des fusées, je sais.

Le code ci-dessous est le racloir dans son intégralité (nettoyé et anonymisé). Ce code fonctionne bien, sauf pour un petit détail, il semble que peu importe la taille du fichier XML (1 Mo ou 7 Mo), le fichier XML résultant manque toujours une petite section à la fin (600 à 800 caractères)).

Notes:

  • Si j'ouvre la page php dans Firefox - je reçois tout le doc pas de problème.

  • Si je lance wireshark et exécute le programme ci-dessous, je vois l'ensemble du doc ​​transféré à travers le fil, mais pas écrit dans le fichier.

using System; 
using System.IO; 
using System.Collections.Generic; 
using System.Text; 

namespace myNameSpace 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      Console.Write("BEGIN TRANSMISSION\n"); 
       writeXMLtoFile(); 
      Console.Write("END TRANSMISSION\n"); 
     } 


     public static void writeXMLtoFile() 
     { 
      String url = "http://somevalidurl.com/dataPage.php?lotsofpars=true"; 
      TextWriter tw = new StreamWriter("xml\\myFile.xml"); 
      tw.Write(ScreenScrape(url)); 
      Console.Write(" ... DONE\n"); 
      tw.Close(); 
     } 
     public static string ScreenScrape(string url) 
     { 
      System.Net.WebRequest request = System.Net.WebRequest.Create(url); 
      using (System.Net.WebResponse response = request.GetResponse()) 
      { 
       using (System.IO.StreamReader reader = new System.IO.StreamReader(response.GetResponseStream())) 
       { 
        return reader.ReadToEnd(); 

       } 
      } 
     } 
    } 
} 

devrais-je utiliser un autre écrivain? J'ai essayé à la fois TextWriter et StreamWriter pour le même effet.

salutations de l'Islande,

Gzur

Répondre

1

Essayez:

XmlDocument doc = new XmlDocument(); 
doc.Load(url); 
doc.Save(filename); 

Il est vraiment facile (avec une erreur de manipulation évidemment). Le framework .Net devrait tout faire pour vous. Il y a environ un mois, j'ai sauté dans les cerceaux en essayant de faire la même chose et je me suis donné un coup de pied quand j'ai lu le fichier d'aide sur XmlDocument;)

+0

** facepalm ** Vous êtes un génie. Fonctionne comme un charme sanglant. Merci un paquet. Merci beaucoup – gzzzur

+0

Pas d'inquiétude. Content de sauver quelqu'un. WebClient.DownloadFile en est un dont je me souviendrai aussi si je n'ai pas besoin de valider le XML du tout. –

0

Cela peut être aussi simple que de ne pas appeler Flush() sur votre StreamWriter, mais pourquoi faire la vie dure pour vous-même? Remplacer toute fonction writeXMLtoFile avec ceci:

public static void writeXMLtoFile() 
{ 
    string url = "http://somevalidurl.com/dataPage.php?lotsofpars=true"; 
    string xml = ScreenScrape(url); 
    File.WriteAllText("xml\\myFile.xml", xml); 
} 

De cette façon, vous pouvez également utiliser le débogueur pour voir ce qui se passe (inspecter la variable xml).

+0

Merci d'avoir pris le temps de répondre :) – gzzzur

1

De plus, si vraiment tout ce que vous voulez faire est de télécharger une page au système de fichiers, enquêter sur la méthode WebClient.DownloadFile :)

Questions connexes