本机直接上网时,请参看
获取远程网页的内容之一(downmoon原创)
本文仅针AD下代理上网的情况:
代码如下:
1、定义变量:
<!-- .lineBorderBlue1 { BORDER-TOP: #999999 1px groove; BORDER-BOTTOM: #999999 1px groove; BORDER-LEFT: #999999 1px groove; BORDER-RIGHT: #999999 1px groove; background-color:#efefef; } -->
定义变量
#region 定义变量
private string strFireWallIP
 ... {
get
 ... {
return System.Configuration.ConfigurationSettings.AppSettings[ " strFireWallIP " ];
}
}
private string strFireWallPort
 ... {
get
 ... {
return System.Configuration.ConfigurationSettings.AppSettings[ " strFireWallPort " ];
}
}
private string strUID
 ... {
get
 ... {
return System.Configuration.ConfigurationSettings.AppSettings[ " strUID " ];
}
}
private string strPWD
 ... {
get
 ... {
return System.Configuration.ConfigurationSettings.AppSettings[ " strPWD " ];
}
}
private string strDomain
 ... {
get
 ... {
return System.Configuration.ConfigurationSettings.AppSettings[ " strDomain " ];
}
}
#endregion
|
方法:
获取指定远程网页内容
/**/
/// <summary>
/// 获取指定远程网页内容
/// </summary>
/// <paramname="strUrl"> 所要查找的远程网页地址 </param>
/// <returns></returns>
//
[WebMethod(Description="获取指定远程网页内容。")]
public
string
getPageContent(
string
strUrl)

...
{
string strResult = "" ;
this .CurrentUrl = strUrl;
if ( this .CurrentUrl.ToLower().StartsWith( " http:// " ) == false )
this .CurrentUrl = " http:// " + this .CurrentUrl;
try
 ... {
contentBytes = GetHtmlByte(CurrentUrl);

}
catch (Exceptionerr)
 ... {
strResult = " 请求错误: " + err.Message;
}
if (contentBytes == null )
 ... {
throw new Exception( " 没有获得返回值 " );
}
strResult = getStringFromByteArray(contentBytes,Encoding.UTF8);
return strResult;
}
|
获取指定远程网页元素字节数组::
获取指定远程网页元素字节数组
#region 获取指定远程网页元素字节数组
 /**/ /// <summary>
/// 获取指定远程网页元素字节数组
/// </summary>
/// <paramname="strUrl"> 所要查找的远程网页地址 </param>
/// <returns></returns>
private byte []GetHtmlByte( string strUrl)
 ... {
string strPara = (strUrl.IndexOf( " ? " ) >= 0 ? strUrl.Substring(strUrl.IndexOf( " ? " ) + 1 ): "" );
System.Text.Encodingencoding = new UTF8Encoding();
byte []byte1 = encoding.GetBytes(strPara);
byte []byteReturn = new byte [ 10000000 ];
if (strUrl.Trim().ToLower().StartsWith( " http:// " ) == false )
 ... {
strUrl = " http:// " + strUrl;
}
HttpWebRequestmyHttpWebRequest = (HttpWebRequest)WebRequest.Create(strUrl);
myHttpWebRequest.AllowAutoRedirect = true ;
myHttpWebRequest.KeepAlive = true ;
myHttpWebRequest.UserAgent = " Mozilla/4.0(compatible;MSIE6.0;WindowsNT5.0;.NETCLR1.1.4322) " ;
System.Net.WebProxyproxy = new WebProxy(strFireWallIP + " : " + strFireWallPort, true );
// proxy=(WebProxy)System.Net.GlobalProxySelection.Select;
System.Net.NetworkCredentialmyCredential = new NetworkCredential(strUID,strPWD,strDomain);
proxy.Credentials = myCredential;
myHttpWebRequest.Proxy = proxy;


HttpWebResponsemyHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();
byte []bRead = new byte [ 1024 ];
int lngCount = 1 ;
int totalLen = 0 ;
StreamrecWeb = myHttpWebResponse.GetResponseStream();
lngCount = recWeb.Read(bRead, 0 , 1024 );
while (lngCount > 0 )
 ... {
Array.Copy(bRead, 0 ,byteReturn,totalLen,lngCount);
totalLen += lngCount;
lngCount = recWeb.Read(bRead, 0 , 1024 );
}
recWeb.Close();
byte []byteGets = new byte [totalLen];
Array.Copy(byteReturn, 0 ,byteGets, 0 ,totalLen);
byteReturn = null ;
bRead = null ;

return byteGets;
}
#endregion

|
转换指定字节数组为字符串::
转换指定字节数组为字符串
#region 转换指定字节数组为字符串
 /**/ /// <summary>
/// 转换指定字节数组为字符串
/// </summary>
/// <paramname="ByteGet"> 字节数组Byte[] </param>
/// <paramname="myEncoding"> 编码方式 </param>
/// <returns></returns>
private static string getStringFromByteArray(Byte[]ByteGet,EncodingmyEncoding)
 ... {
int i,lngCount;
StringBuilderaTemp = new StringBuilder( 10000 );
lngCount = ByteGet.Length;
for (i = 0 ;i < lngCount;i += 10000 )
 ... {
aTemp.Append(myEncoding.GetString(ByteGet,i,(lngCount >= i + 10000 ? 10000 :lngCount - i)));
}
if (i <= lngCount)
 ... {
aTemp.Append(myEncoding.GetString(ByteGet,i,(lngCount - i)));
}
return aTemp.ToString();
}

#endregion
|
借用这个,写了个抽取中国天气网预报的服务!很爽!
在webForm中WebRequest/WebClient/WebBrowser获取远程页面源码的三种方式(downmoon)