问了一次没人答,再问,可惜没分了,希望大家帮忙
原帖地址:http://community.csdn.net/Expert/topic/4792/4792029.xml?temp=.3838465
我想程序通过url地址取得网站内容。代码如下:
private static string getPage(String url,String payload)
{
StringBuilder strRet = new StringBuilder();
WebResponse result = null;
try
{
WebRequest req = WebRequest.Create(url);
req.Method = "POST";
req.ContentType = "application/x-www-form-urlencoded";
StringBuilder UrlEncoded = new StringBuilder();
Char[] reserved = {'?', '=', '&'};
byte[] SomeBytes = null;
if (payload != null)
{
int i=0, j;
while(i<payload.Length)
{
j=payload.IndexOfAny(reserved, i);
if (j==-1)
{
UrlEncoded.Append(payload.Substring(i, payload.Length-i));
break;
}
UrlEncoded.Append(payload.Substring(i, j-i));
UrlEncoded.Append(payload.Substring(j,1));
i = j+1;
}
SomeBytes = Encoding.Default.GetBytes(UrlEncoded.ToString());
req.ContentLength = SomeBytes.Length;
Stream newStream = req.GetRequestStream();
newStream.Write(SomeBytes, 0, SomeBytes.Length);
newStream.Close();
}
else
{
req.ContentLength = 0;
}
result = req.GetResponse();
Stream ReceiveStream = result.GetResponseStream();
Encoding encode = System.Text.Encoding.Default;
StreamReader sr = new StreamReader( ReceiveStream, encode );
Char[] read = new Char[256];
int count = sr.Read( read, 0, 256 );
while (count > 0)
{
String str = new String(read, 0, count);
strRet.Append(str);
count = sr.Read(read, 0, 256);
}
}
catch
{
}
finally
{
if ( result != null )
{
result.Close();
}
}
return strRet.ToString();
}
去大部分网站都可以,可是http://www.cma.gov.cn/cma_new/tqyb/gn_city.php?city=上海
这个却不行,取到的网站内容不是“上海”的信息,而是“北京”的信息,我发现如果没有city这个参数默认的就是北京,所以可能问题出在这个参数上,
这是我的调用代码:getPage("http://www.cma.gov.cn/cma_new/tqyb/gn_city.php","city="+System.Web.HttpUtility.UrlEncode("上海",Encoding.Default))
getPage("http://www.cma.gov.cn/cma_new/tqyb/gn_city.php?city="+System.Web.HttpUtility.UrlEncode("上海",Encoding.Default),"")
我知道传中文参数要处理,可是试了Default、UTF8、Unicode都不行,实在没办法了,大家帮忙啊,谢谢了
问题点数:10、回复次数:5Top
1 楼Knight94(愚翁)回复于 2006-06-01 09:06:52 得分 0
你可以用gb2312编码试一下。
例如:
System.Web.HttpUtility.UrlEncode("上海",Encoding.GetEncoding("gb2312"),"" )Top
2 楼Knight94(愚翁)回复于 2006-06-01 09:07:17 得分 0
如果还不行,你最好能了解一下php方支持什么编码。Top
3 楼zjzty444()回复于 2006-06-01 09:21:47 得分 0
Knight94
2312不行,php方常用的编码就这几个吧Top
4 楼Knight94(愚翁)回复于 2006-06-01 09:33:42 得分 0
你直接在IE中输入如下:
http://www.cma.gov.cn/cma_new/tqyb/gn_city.php?city=上海
是否可以呢Top
5 楼zjzty444()回复于 2006-06-01 09:45:36 得分 0
可以,在ie直接输没问题Top




