gpt4 book ai didi

c# - 以句点结尾的 URL 的 WebClient 问题

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

我正在运行以下代码;

using (WebClient wc = new WebClient())
{
string page = wc.DownloadString(URL);
...
}

要访问股价网站的 URL,http://www.shareprice.co.uk

如果您将公司的符号名称附加到 URL 的末尾,则会返回一个页面,我会解析该页面以获取最新的价格信息等。

例如

http://www.shareprice.co.uk/VOD

http://www.shareprice.co.uk/TW .

现在,我的问题是某些符号以句点结尾,如第二个示例所示。由于某些未知原因,上面的代码在检索这些类型的 URL 时出现问题。

没有运行时错误,但返回一个页面,报告网站本身“找不到符号”,表明在调用DownloadString 和实际的 HTTP 请求。

有没有人知道可能导致此问题的原因以及如何解决?

谢谢

最佳答案

您似乎在 WebClient/WebRequest 中发现了一个错误,尽管也许 Microsoft 是故意将其放入其中,谁知道呢。尽管如此,当您传入 TW. 时,URI 类会在没有句点的情况下将其转换为 TW。由于 WebClient/WebRequest 将字符串解析为 URI,您的 .正在那个世界消失。

您可能必须使用 TcpClient 来解决这个问题并推出您自己的网络客户端。这个的任何变化:

TcpClient oClient = new TcpClient("www.shareprice.co.uk", 80);

NetworkStream ns = oClient.GetStream();

StreamWriter sw = new StreamWriter(ns);
sw.Write(
string.Format(
"GET /{0} HTTP/1.1\r\nUser-Agent: {1}\r\nHost: www.shareprice.co.uk\r\n\r\n",
"TW.",
"MyTCPClient" )
);
sw.Flush();

StringBuilder sb = new StringBuilder();

while (true)
{
int i = ns.ReadByte(); // Inefficient but more reliable
if (i == -1) break; // Other side has closed socket
sb.Append( (char) i ); // Accrue 'c' to save page data
}

oClient.Close();

这将为您提供 302 重定向,因此只需解析“位置:”并使用新位置再次执行上述操作。

HTTP/1.1 302 Found
Date: Wed, 11 Nov 2009 19:29:27 GMT
Server: lighttpd
X-Powered-By: PHP/5.2.4-2ubuntu5.7
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Location: /TW./TAYLOR-WIMPEY-PLC
Content-type: text/html; charset=UTF-8
Content-Length: 0
Set-Cookie: SSID=668d5d0023e9885e1ef3762ef5e44033; path=/
Vary: Accept-Encoding
Connection: close

关于c# - 以句点结尾的 URL 的 WebClient 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1716667/

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