2009-05-30 3 views
4

でストリームにWebページをダウンロードするにはどうすればよい私は、これは基本的な質問でなければなりません知っているが、私はレンガの壁に当たっています。 URL/URIに行き、ファイルを開いて文字列変数に変換するかのように結果の文字列をダウンロードしたいと思っています。私は.NET

私はIO.StreamとNet.httpxxxながら約詰めされていますが、正しい方法で並ぶように要素を取得するために管理していません。

私は、私は取得しないビットは、私は理解して少しです...それはローカルファイルシステムではないので、標準ストリームでページを開いてから、「与えられたパスのフォーマットがサポートされていません」を取得します..どのようにして等価を達成するのですか:

Public Function GetWebPageAsString(pURL As String) As String 
     Dim lStream As IO.StreamReader = New System.IO.StreamReader(pURL) 
     Return lStream.ReadToEnd 

End Function 
+0

のようにみんなありがとうを調べ、それぞれ一つの解決策は、仕事をした(最終的に)私が受け入れられた1が返さ私が何を求めているのではなく、私が探していたものが、私がそれを選んだ理由です。 (VBの2行に加えて)。 次のVBユーザーのための翻訳: Dim client as System.Net.WebClient = New System.Net.WebClient() Dim html As String = client.DownloadString( "http://www.google.com") –

+0

追加の注意:私はちょうど私の問題の半分は、私が取得しようとしているURLは、私が要求を行う前にエスケープする必要があるということです。私はおそらく私が昨夜半深夜にこれを選んいた場合:) –

答えて

7

短い答えは、C#で、

using(System.Net.WebClient client = new System.Net.WebClient()) 
{ 
    string html = client.DownloadString("http://www.google.com"); 
} 
+0

しかし、これはあなたにストリームを与えるわけではありません。 – M4N

+0

@Martin:「それはString変数に変換する」のための解決策を含んでいます –

+0

厳密には、私が求めていたものではありませんでした。 –

0

この関数は、URIをファイルにダウンロードします。あなたは簡単に文字列VARにそれを置くためにそれを適応させることができます:

public static int DownloadFile(String remoteFilename, String localFilename, bool enforceXmlSafe) 
{ 
// Function will return the number of bytes processed 
// to the caller. Initialize to 0 here. 
int bytesProcessed = 0; 

// Assign values to these objects here so that they can 
// be referenced in the finally block 
Stream remoteStream = null; 
Stream localStream = null; 
WebResponse response = null;    

// Use a try/catch/finally block as both the WebRequest and Stream 
// classes throw exceptions upon error 
try 
{ 
    // Create a request for the specified remote file name 
    WebRequest request = WebRequest.Create(remoteFilename); 
    if (request != null) 
    { 
     // Send the request to the server and retrieve the 
     // WebResponse object 
     response = request.GetResponse(); 
     if (response != null) 
     { 
      // Once the WebResponse object has been retrieved, 
      // get the stream object associated with the response's data 
      remoteStream = response.GetResponseStream(); 

      // Create the local file 
      if (localFilename != null) 
       localStream = File.Create(localFilename); 
      else 
       localStream = new MemoryStream(); 

      // Allocate a 1k buffer 
      byte[] buffer = new byte[1024]; 
      int bytesRead; 

      // Simple do/while loop to read from stream until 
      // no bytes are returned 
      do 
      { 
       // Read data (up to 1k) from the stream 
       bytesRead = remoteStream.Read(buffer, 0, buffer.Length); 

       // Write the data to the local file 
       localStream.Write(buffer, 0, bytesRead); 

       // Increment total bytes processed 
       bytesProcessed += bytesRead; 
      } while (bytesRead > 0); 
     } 
    } 
} 
catch (Exception e) 
{ 
    Console.WriteLine(e.Message); 
} 
finally 
{ 
    // Close the response and streams objects here 
    // to make sure they're closed even if an exception 
    // is thrown at some point 
    if (response != null) response.Close(); 
    if (remoteStream != null) remoteStream.Close(); 
    if (localStream != null) localStream.Close(); 
} 

// Return total bytes processed to caller. 
return bytesProcessed; 
} 
2

WebClient.OpenRead()は、あなたが探しているものかもしれません。上記のリンクMSDNのページから

サンプル:

Dim uriString as String 
uriString = "http://www.google.com" 

Dim myWebClient As New WebClient() 

Console.WriteLine("Accessing {0} ...", uriString) 

Dim myStream As Stream = myWebClient.OpenRead(uriString) 

Console.WriteLine(ControlChars.Cr + "Displaying Data :" + ControlChars.Cr) 
Dim sr As New StreamReader(myStream) 
Console.WriteLine(sr.ReadToEnd()) 

myStream.Close() 
+0

感謝を依頼する必要なかっただろうが、私はストリームとして指定されたパスのフォーマットは薄暗いmyStreamに がサポートされていないため= myWebClient.OpenRead(uriString)ライン を取得Webページhttp://www.alllotto.com/Arizona-Pick-3-May-2009-Lottery-Results.php それは、Webページの問題ですか? –

+0

この非常にページと同じ http://stackoverflow.com/questions/929808/how-do-i-download-a-webpage-into-a-stream-in-net 一つで同じエラーを与えます私は一晩中ストライクしています。 –

+0

上記のサンプルをこの質問のURLまたは「http://www.google.com」で実行すると、期待どおりに機能します。質問に完全なコードを追加できますか? – M4N

関連する問題