【发布时间】:2023-03-31 13:56:01
【问题描述】:
我有这个网址:
var url = "http://10.0.0.68/SET STB MEDIA CTRL {\"type\":\"tv\",\"action\":\"start query status\"}";
var newUri = new Uri(url);
这个 URI 的绝对路径是(From newUri):
http://10.0.0.68/SET%20STB%20MEDIA%20CTRL%20%7B%22type%22:%22tv%22,%22action%22:%22start%20query%20status%22%7D
我安装了提琴手,当我进入浏览器这个网址时:
"http://10.0.0.68/SET STB MEDIA CTRL {"type":"tv","action":"start query status"}"
我可以看到,它被转换成这个网址:
"http://10.0.0.68/SET%20STB%20MEDIA%20CTRL%20%7B%22type%22%3A%22tv%22%2C%22action%22%3A%22start%20query%20status%22%7D"
当我在 Windows 或手机模拟器上运行该应用程序时,一切正常,但在 Windows Mobile 上运行时 - 出现错误 (301),当我尝试在 Chrome/Firefox 中打开绝对路径时 - 出现同样的错误(301)
看来,在手机上运行时,字符串url转换错误,可以看到,绝对url和chrome/firefox的url是有区别的。问题是,这个字符 ":" 没有转换为 '3A'
正如我已经写过的,我只在手机上遇到这个问题。
var client = new HttpClient();
var url = "http://10.0.0.68/SET STB MEDIA CTRL {\"type\":\"tv\",\"action\":\"start query status\"}";
var uri = new Uri (url); //Just for debug
var response = await client.GetAsync(url);
var result = await response.Content.ReadAsStringAsync();
不管我使用 HttpClient 还是 WebView 控件 - 在 Windows Mobile 上 - 仍然是同样的错误 - 301
问题:
- 这是我的代码造成的还是 .NET 中的错误?
- 如果是我的错,我该如何解决?
好吧,我想了想,发现我不需要使用 HttpClient - 我创建了套接字客户端 - 根据微软教程
我通过这个客户端模拟网络浏览器,但只发送简短的请求:
var stringToSend =
"GET /GET%20NOWORNEXT%20EPG%20%7B%20%22count%22%20%3A%20%2230%22%2C%20%22group%22%20%3A%20%225%22%2C%20%22epgNowOrNextFlag%22%20%3A%20%221%22%2C%20%22startIdx%22%20%3A%20%220%22%7D HTTP/1.1"
当我使用我从 PC 调试时,回复是正确的:
"HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nDate: Fri, 08 Jul 2016 14:20:31 GMT\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n200 {\"group\":5,\"count\":30,\"data\": etc.... "
但从 Windows Mobile 手机的结果是:
"HTTP/1.1 200 OK\r\nAccess-Control-Allow-Origin: *\r\nDate: Fri, 08 Jul 2016 15:42:01 GMT\r\nContent-Type: text/html\r\nConnection: Close\r\n\r\n301"
所以回复又是 301...
不可能……
【问题讨论】:
-
如果您的网页跳转到其他网页,您可以在 HttpWebRequest 中使用
AllowAutoRedirect = true。获取头部并获取网址 -
不是问题,看第一条评论下划线..