我正在运行以下代码;
using (WebClient wc = new WebClient())
{
string page = wc.DownloadString(URL);
...
}
要访问股价网站的 URL,http://www.shareprice.co.uk
如果您将公司的符号名称附加到 URL 的末尾,则会返回一个页面,我将解析该页面以获取最新的价格信息等。
e.g.
http://www.shareprice.co.uk/VOD
http://www.shareprice.co.uk/TW.
现在,我的问题是某些符号以句点结尾,如第二个示例所示。由于某种未知的原因,上面的代码在检索此类 URL 时出现问题。
没有运行时错误,但返回一个页面,报告网站本身“找不到符号”,这表明在调用 DownloadString 和实际的 HTTP 请求。
有谁知道可能导致此问题的原因以及如何解决它?
Thanks
您似乎在 WebClient/WebRequest 中发现了一个错误,尽管微软可能是故意添加的,谁知道呢。尽管如此,当您传递 TW. 时,URI 类会将其转换为不带句点的 TW。由于 WebClient/WebRequest 将字符串解析为 URI,因此您的 .正在那个世界消失。
您可能必须使用 TcpClient 来解决此问题并推出您自己的 Web 客户端。此的任何变体:
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
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)