【发布时间】:2021-10-24 02:21:16
【问题描述】:
我有一些简单的 VB.Net 代码,我正在尝试获取一个远程网页。例如,当我使用此代码获取 msn.com 时,该代码始终完美无缺。当我尝试使用此代码访问 amazon.com 时,代码和其他所有请求都完美无缺。但是每个其他请求,特别是如果有一些等待时间,代码会呈现如下:
��Yms�8���_!��` Ӓwwj�4�r�f2�$�3{U����o&@Ɏ��~�I�N���(�� � �4��of���~������ty2��Eg"��G��������_�w&r�C��N�(4�������� �_b����L*���J=?�P��j=����^�}�[n����7�还有更多类似这样的字符。
这可能是超时问题,也可能是响应的页面编码问题。我想不通。
这是代码:(并在我的本地主机上保存为 test.aspx )
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
Sub Page_Load(Sender as Object, E as EventArgs)
Dim q As String
Randomize
q= (Rnd)
Dim oRequest As WebRequest = WebRequest.Create("https://www.amazon.com/dp/0132350882/?" & q)
Dim oResponse As WebResponse = oRequest.GetResponse()
Dim oStream As Stream = oResponse.GetResponseStream()
Dim oStreamReader As New StreamReader(oStream, Encoding.UTF8)
Response.Write(oStreamReader.ReadToEnd())
oResponse.Close()
oStreamReader.Close()
End Sub
</script>
另外,如果我加载页面,第一次编码是错误的,但如果我快速重新加载页面,第二次编码是正确的。如果我在那之后继续重新加载页面,并且很快我可能会添加,它总是正确的。
提前致谢,
吉姆
好的,我修改了上面的代码成为(它没有解决问题):
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
</head>
<body>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.Net" %>
<%@ Import Namespace="System.IO" %>
<script language="VB" runat="server">
Sub Page_Load(Sender as Object, E as EventArgs)
Dim q As String
Randomize
q= (Rnd)
Dim oRequest As WebRequest = WebRequest.Create("https://www.amazon.com/dp/0132350882/?" & q)
Dim oResponse As WebResponse = oRequest.GetResponse()
Dim oStream As Stream = oResponse.GetResponseStream()
Dim oStreamReader As New StreamReader(oStream, Encoding.UTF8)
Response.Write(oStreamReader.ReadToEnd())
oResponse.Close()
oStreamReader.Close()
End Sub
</script>
</body>
</html>
但是很奇怪,当远程在浏览器中正确呈现时,里面的所有东西都还在。然而,即使使用更新的代码,当它显示错误的字符集时,它也会被从文档的头部删除。我想知道亚马逊是否正在这样做?
我想说的是,HEAD 中的内容会被剥离出来
【问题讨论】:
-
你的
Response是否指定它的编码也是UTF-8? -
这是响应---> Cache-Control: private Content-Length: 1357528 Content-Type: text/html; charset=utf-8 日期:2021 年 8 月 23 日星期一 21:01:32 GMT 服务器:Microsoft-IIS/8.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET
-
您的
Response,您的Write。不是亚马逊的回应。这样浏览器就可以立即知道编码,而不是以后再弄清楚。 -
OK 我刚刚用 Opera 测试过,问题依旧存在,响应头是 ---> Cache-Control: private Content-Length: 235866 Content-Type: text/html; charset=utf-8 日期:星期一,2021 年 8 月 23 日 21:15:14 GMT 服务器:Microsoft-IIS/8.5 X-AspNet-Version:4.0.30319 X-Powered-By:ASP.NET