I know this should be a basic question but I am hitting a brick wall. I am looking to go to a URL/URI download the resulting string as if I had opened a file and then get it out into a String variable.
我知道这应该是一个基本问题,但我正在打砖墙。我希望转到URL / URI下载生成的字符串,就好像我打开了一个文件,然后将其输出到String变量中。
I have been stuffing about with IO.Stream and Net.httpxxx but haven't managed to get the elements to line up in the right way.
我一直在填充IO.Stream和Net.httpxxx,但还没有设法让元素以正确的方式排列。
I get "the given path's format is not supported" from opening the page in the standard stream, because it's not in the local file system ... that bit i understand, the bit I don't get is ... how do I achieve the equivelent of:
我从标准流中打开页面得到“不支持给定路径的格式”,因为它不在本地文件系统中...我理解的那一点,我没有得到的是......我该怎么办?达到以下目的:
Public Function GetWebPageAsString(pURL As String) As String
Dim lStream As IO.StreamReader = New System.IO.StreamReader(pURL)
Return lStream.ReadToEnd
End Function
3 个解决方案
#1
The short answer, in C#, looks like
简短的回答,在C#中,看起来像
using(System.Net.WebClient client = new System.Net.WebClient())
{
string html = client.DownloadString("http://www.google.com");
}
#2
WebClient.OpenRead() might be what you're looking for.
WebClient.OpenRead()可能正是您正在寻找的。
Sample from the MSDN page linked above:
上面链接的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()
#3
This function downloads any URI to a file. You could easily adapt it to put it into a string var:
此函数将任何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;
}
#1
The short answer, in C#, looks like
简短的回答,在C#中,看起来像
using(System.Net.WebClient client = new System.Net.WebClient())
{
string html = client.DownloadString("http://www.google.com");
}
#2
WebClient.OpenRead() might be what you're looking for.
WebClient.OpenRead()可能正是您正在寻找的。
Sample from the MSDN page linked above:
上面链接的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()
#3
This function downloads any URI to a file. You could easily adapt it to put it into a string var:
此函数将任何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;
}