从GetResponseStream读取HTTP响应的最佳方法是什么?
目前我正在使用以下方法.
Using SReader As StreamReader = New StreamReader(HttpRes.GetResponseStream) SourceCode = SReader.ReadToEnd() End Using
我不太确定这是否是读取http响应的最有效方法.
我需要输出为字符串,我看过一篇文章有不同的方法,但我不是很好,如果它是一个很好的.在我的测试中,代码在不同的网站中存在一些编码问题.
你如何阅读网络回复?
我使用这样的东西从URL下载文件:
if (!Directory.Exists(localFolder)) { Directory.CreateDirectory(localFolder); } try { HttpWebRequest httpRequest = (HttpWebRequest)WebRequest.Create(Path.Combine(uri, filename)); httpRequest.Method = "GET"; // if the URI doesn't exist, an exception will be thrown here... using (HttpWebResponse httpResponse = (HttpWebResponse)httpRequest.GetResponse()) { using (Stream responseStream = httpResponse.GetResponseStream()) { using (FileStream localFileStream = new FileStream(Path.Combine(localFolder, filename), FileMode.Create)) { var buffer = new byte[4096]; long totalBytesRead = 0; int bytesRead; while ((bytesRead = responseStream.Read(buffer, 0, buffer.Length)) > 0) { totalBytesRead += bytesRead; localFileStream.Write(buffer, 0, bytesRead); } } } } } catch (Exception ex) { // You might want to handle some specific errors : Just pass on up for now... // Remove this catch if you don't want to handle errors here. throw; }
也许你可以查看WebClient类.这是一个例子:
using System.Net; namespace WebClientExample { class Program { static void Main(string[] args) { var remoteUri = "http://www.contoso.com/library/homepage/images/"; var fileName = "ms-banner.gif"; WebClient myWebClient = new WebClient(); myWebClient.DownloadFile(remoteUri + fileName, fileName); } } }
我用字符串做的简单方法.注意构造函数的true
第二个参数StreamReader
.这告诉它从字节顺序标记中检测编码,并且可能有助于解决您遇到的编码问题.
string target = string.Empty; HttpWebRequest httpWebRequest = (HttpWebRequest)WebRequest.Create("http://www.informit.com/guides/content.aspx?g=dotnet&seqNum=583"); HttpWebResponse response = (HttpWebResponse)httpWebRequest.GetResponse(); try { StreamReader streamReader = new StreamReader(response.GetResponseStream(),true); try { target = streamReader.ReadToEnd(); } finally { streamReader.Close(); } } finally { response.Close(); }
在powershell中,我有这个功能:
function GetWebPage {param ($Url, $Outfile) $request = [System.Net.HttpWebRequest]::Create($SearchBoxBuilderURL) $request.AuthenticationLevel = "None" $request.TimeOut = 600000 #10 mins $response = $request.GetResponse() #Appending "|Out-Host" anulls the variable Write-Host "Response Status Code: "$response.StatusCode Write-Host "Response Status Description: "$response.StatusDescription $requestStream = $response.GetResponseStream() $readStream = new-object System.IO.StreamReader $requestStream new-variable db | Out-Host $db = $readStream.ReadToEnd() $readStream.Close() $response.Close() #Create a new file and write the web output to a file $sw = new-object system.IO.StreamWriter($Outfile) $sw.writeline($db) | Out-Host $sw.close() | Out-Host }
我称之为:
$SearchBoxBuilderURL = $SiteUrl + "nin_searchbox/DailySearchBoxBuilder.asp" $SearchBoxBuilderOutput="D:\ecom\tmp\ss2.txt" GetWebPage $SearchBoxBuilderURL $SearchBoxBuilderOutput