gpt4 book ai didi

c# - 停止 C# Uri 构造函数对 url 进行编码(竖线)

转载 作者:行者123 更新时间:2023-11-30 18:22:41 26 4
gpt4 key购买 nike

我需要向包含未转义“|”的地址发送 GET 请求(竖线)。服务器(不是我的)不会接受带有转义 | 的查询。 (即 %7C)

但是,每当我从地址构造一个新的 Uri 时,我都可以看到 absoluteUri 包含我地址的转义版本 (%7C)。

有没有办法在 C# 中发送未转义的 GET 请求?

(使用.NET 4.5)

任何帮助将不胜感激!谢谢。

编辑:

    string formUrl = "http://example.com/|12|"; //just an example  
Uri temp = new Uri(formUrl);
HttpWebRequest req = (HttpWebRequest)WebRequest.Create(temp);
req.ContentType = "application/x-www-form-urlencoded";
req.CookieContainer = cookies;
req.Method = "GET";
req.KeepAlive = true;
req.KeepAlive = true;
HttpWebResponse resp = (HttpWebResponse)req.GetResponse();
List<string> gethtml = new List<string>();
using (StreamReader sr = new StreamReader(resp.GetResponseStream()))
{
while (!sr.EndOfStream)
gethtml.Add(sr.ReadLine());
}
resp.Dispose();

如果我查看 temp.AbsoluteUri,竖线/管道字符被编码为 %7C。

谢谢!

最佳答案

WebRequest.Create 方法有一个接受字符串的重载。所以你可以这样做:

var req = WebRequest.Create(temp.AbsoluteUrl.Replace("%7C", "|");

但这确实有一个潜在的问题:如果出于某种原因您的 url 已经可以合法地包含 %7C,它也将被替换。如果这是一个问题,以下方法比较笨拙但有效(如果需要,将 --PIPE-- 替换为其他任何内容):

var tempFormUrl = formUrl.Replace("|","--PIPE--");
var temp = new Uri(tempFormUrl);
var req = WebRequest.Create(temp.AbsoluteUrl.Replace("--PIPE--", "|");

关于c# - 停止 C# Uri 构造函数对 url 进行编码(竖线),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33686349/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com