关于http get方法问题
网页中有一个连接包含中文,地址如下:"http://192.168.1.1/userRpm/StatusRpm.htm?connect=连 接&wan=1"
在ie中执行正常
通过抓包工具可以看到以下内容:
“Get /userRpm/StatusRpm.htm?connect=\301\254%20\275\323&wan=1 http1.1”但是现在有一个问题,用c#写了一个自动执行的应用(winform),用的httpwebrequest类,提交的连接确是下面的样子:
“Get /userRpm/StatusRpm.htm?connect=%E8%BF%9E%20%E6%8E%A5&wan=1 http1.1”
我知道是uri编码的问题,换了几种编码,都不是ie中格式,所以不能实现功能。
请高手们指点一下,这是怎么回事,这个问题困扰了我好几天了。
谢谢
网页中有一个连接包含中文,地址如下:"http://192.168.1.1/userRpm/StatusRpm.htm?connect=连 接&wan=1"
在ie中执行正常
通过抓包工具可以看到以下内容:
“Get /userRpm/StatusRpm.htm?connect=\301\254%20\275\323&wan=1 http1.1”但是现在有一个问题,用c#写了一个自动执行的应用(winform),用的httpwebrequest类,提交的连接确是下面的样子:
“Get /userRpm/StatusRpm.htm?connect=%E8%BF%9E%20%E6%8E%A5&wan=1 http1.1”
我知道是uri编码的问题,换了几种编码,都不是ie中格式,所以不能实现功能。
请高手们指点一下,这是怎么回事,这个问题困扰了我好几天了。
谢谢
解决方案 »
- c#操作excel
- Response.Redirect 后怎么打开新的ShowSearchInfo.aspx页
- 请教一下dataview的问题,为什么没有想像中的那么棒
- 正面学习asp.net,c# 为了工作 目标是什么?(学到什么程度)
- 如何访问Controls集合中的控件?
- 求多元线性回归算法源代码(C#/C++)
- C#实时图像传输问题
- 我这段打印代码对吗?利用水晶报表打印
- 请高手指点,如何用C#实现文件的上传,注意容量大于4M,请文怎么实现,谢谢
- C#和SQL开发的软件,如何打包可以在不安装SQL的电脑上使用
- wince中的winform下线程状态的判断
- 新手提问!关于c#和数据库的问题
使用 GET 方式提交中文数据, 编码方式要以目标的网站为标准。 常用的有 gb2312 和 utf8 两种,如:
Encoding mEncoding = Encoding.GetEncoding("gb2312");
string strUrl = "http://192.168.1.1/userRpm/StatusRpm.htm?connect=" + HttpUtility.UrlEncode("连 接", mEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
}
string strurl = System.Web.HttpUtility.UrlEncode(temp);
Encoding mEncoding = Encoding.GetEncoding("gb2312");
string strUrl = "http://192.168.1.1/userRpm/StatusRpm.htm?connect=" + HttpUtility.UrlEncode("连 接", mEncoding);
HttpWebRequest req = (HttpWebRequest)HttpWebRequest.Create(strUrl);
req.Method = "GET";
using (WebResponse wr = req.GetResponse())
{
}
网页的编码是gb2312,我提交的“/userRpm/StatusRpm.htm?connect= %E8%BF%9E%20%E6%8E%A5&wan=1”也是这个编码,
但是从ie地址栏直接提交是这个:/userRpm/StatusRpm.htm?connect=\301\254%20\275\323&wan=1
这两个提交信息中的中文编码不一样,我想再问一下,“\301\254”是什么编码?
谢谢
你说3楼正确2楼复杂?string temp = "http://192.168.1.1/userRpm/StatusRpm.htm?connect=连 接&wan=1";
string strurl = System.Web.HttpUtility.UrlEncode(temp);正解个屁!整个URL都编码掉,你疯了?哈哈哈
string strurl = System.Web.HttpUtility.UrlEncode(temp);
应该不会错的它只是负责把不是url的合法部分编译成url楼主我强烈怀疑你错的地方是你的编码其他部分,你调试一下,弄一个临时变量,监视一下
还有啊!
下载网页代码,你不必在乎什么要和ie链接格式相等,你用firefox,它不支持中文名称的,如果url中有中文,firefox是要转换编码的!,关键就是转换编码的方法是否正确!UrlEncode这个应该是这个正确的,你自己好好调试检查......
你知道
string temp = "http://192.168.1.1/userRpm/StatusRpm.htm?connect=连 接&wan=1";
string strurl = System.Web.HttpUtility.UrlEncode(temp); 的执行结果是什么吗?不知道的话我告诉你:http%3a%2f%2f192.168.1.1%2fuserRpm%2fStatusRpm.htm%3fconnect%3d%e8%bf%9e+%e6%8e%a5%26wan%3d1 你觉得这是正确的吗?打倒信口开河的。
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;/// <summary>
/// Class1 的摘要说明
/// </summary>
public class Class1
{
public Class1()
{
//
// TODO: 在此处添加构造函数逻辑
//
} public static string InitChineseUrl(string chineseUrl)
{
Uri url = new Uri(chineseUrl);
System.Collections.Specialized.NameValueCollection nv = System.Web.HttpUtility.ParseQueryString(url.Query, System.Text.Encoding.GetEncoding("utf-8"));
string query = "";
for (int i = 0; i < nv.Count; i++)
{
if (query.Trim() == string.Empty)
{
query = "?" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));
}
else
{
query += "&" + nv.Keys[i] + "=" + HttpUtility.UrlEncode(nv[i], System.Text.Encoding.GetEncoding("GB2312"));
}
}
string u = chineseUrl.Split('?')[0] + query;
return u;
}
}
这个也许能解决战斗
楼主试试
返回结果是这个,没有空格
返回结果是这个,没有空格
www.wantsoft.com/article/45.htm