`

asp utf-8 gbk

阅读更多

怪事,ServerXMLHTTP乱码,XMLHTTP却正常?

写道
2009-04-29 00:55:34 来自:帅の玹栤 浏览数:92次
VB code 'Set objXmlHttp=server.createobject("Microsoft.XMLHTTP") '用这句正常 'Set objXmlHttp=server.createobject("Msxml2.XMLHTTP.4.0") '用这句也正常 Set objXmlHttp=server.createobject("MSXML2.ServerXMLHTTP") '用这句则中文显示为乱码 objXmlHttp.open "GET","http://www.a-utf-8-page.com",false '访问页面为utf-8;gbk页面没问题 objXmlHttp.send() Response.BinaryWrite objXmlHttp.responseBody 'Response.Write BytesToBstr(objXmlHttp.responseBody,"GB2312")'用这句进行转换,依然输出乱码 Function BytesToBstr(body,CSet) '将2进制转换为文本字符 On Error Resume Next 'CSet :GB2312或UTF-8 Dim objstream Set objstream = Server.CreateObject("adodb.stream") With objstream .Type = 1 .Mode = 3 .Open .Write body .Position = 0 .Type = 2 .CharSet = CSet '显示编码 BytesToBstr = .ReadText .Close End With Set objstream = Nothing End Function

怪事了,其他两个都没问题的,MSXML2.ServerXMLHTTP这个东西看来有些另类啊。无论我怎么转换编码,就是不显示中文。客户端页面已设置为GB2312编码了。

 

写道
解决了,原来是URL传递的参数中有中文,用Microsoft.XMLHTTP和Msxml2.XMLHTTP.4.0这2个客户端的组件,他们能自动将URL中的中文进行编码,而用MSXML2.ServerXMLHTTP这个服务端的组件,它不会自动进行编码,于是报错.
 
写道
Set objXmlHttp=server.createobject("MSXML2.ServerXMLHTTP") '用这句则中文显示为乱码
objXmlHttp.open "GET","http://www.a-utf-8-page.com",false '访问页面为utf-8;gbk页面没问题
objXmlHttp.send()
Response.BinaryWrite objXmlHttp.responseBody

这4行代码关键问题就在第一行上,换成其他2个组件都没问题,不会有乱码.但ServerXMLHTTP却出现乱码.
 
写道
<script>
var oXmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
oXmlHttp.open("GET","http://dotnet.aspx.cc/content.aspx", false);
oXmlHttp.send()
var oStream = new ActiveXObject("ADODB.Stream");
if(oStream == null)
alert("您的机器不支持ADODB.Stream.")
else
{
oStream.Type=1;
oStream.Mode=3;
oStream.Open() ;
oStream.Write(oXmlHttp.responseBody);
oStream.Position= 0;
oStream.Type= 2;
oStream.Charset="gb2312";
var result= oStream.ReadText();
oStream.Close();
oStream = null;
alert( result);
}
</script>
 
写道
responseText
将响应信息作为字符串返回
XMLHTTP尝试将响应信息解码为Unicode字符串,XMLHTTP默认将响应数据的编码定为UTF-8,如果服务器返回的数据带 BOM(byte-order mark),XMLHTTP可以解码任何UCS-2 (big or little endian)或者UCS-4 数据。注意,如果服务器返回的是xml文档,此属性并不处理xml文档中的编码声明。你需要使用responseXML来处理。

__________

这个意思是说,如果相关页面是utf-8,则直接用responseText);返回的是unicode(win系统默认编码)

远程获取MSXML2.serverXMLHTTP 和 MSXML2.XMLHTTP

MSXML2.serverXMLHTTP 和 MSXML2.XMLHTTP在做一个垃圾站采集的时候遇到问题,用风讯 4.0采集到一定数目的时候总是提示 “出现一个意外错误: ”Send” ”,查看function.asp代码,发现问题应该是出在 MSXML2.XMLHTTP上,而且应该是win2003下容易出现。这种情况一般重启IIS,或者站点文件重置一下权限就可以解决。毫无疑问这种解决办法对大多数站长不适应,也不是我们的态度。
在网上查了查资料,发现出现这种问题的很多,不过都没有解决。风讯论坛上有一个提问的,没有答案。后来我试着将 MSXML2.XMLHTTP 在config2.asp 中修改为 MSXML2.serverXMLHTTP,BINGO!而且微软的文档也显示,不建议在服务器上使用 MSXML2.XMLHTTP,好像是因为会出现占用资源过高的情况吧。

 

 


XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

本文回答有关 ServerXMLHTTP 对象的一些常见问题。
更多信息
1. 什么是 ServerXMLHTTP?

ServerXMLHTTP 为不同 Web 服务器之间的服务器安全 HTTP 访问提供方法和属性。您可以使用此对象在不同的 Web 服务器之间交换 XML 数据。


2. 如何安装 ServerXMLHTTP?

ServerXMLHTTP 随 Microsoft XML Parser (MSXML) 版本 3.0 或更高版本提供。您可以从以下 Microsoft Developer Network (MSDN) 网站下载并安装 MSXML 3.0:
http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en (http://www.microsoft.com/downloads/details.aspx?amp;displaylang=en&familyid=8167837e-0983-4988-99a4-377ef5c0da2e&displaylang=en )
3. ServerXMLHTTP 具有什么平台要求?

ServerXMLHTTP 支持仅在安装 Microsoft Windows 2000 的计算机上或者在安装带 Microsoft Internet Explorer 5.01(或更高版本)的 Microsoft Windows NT 4.0 的计算机上提供。它在其他平台(如 Microsoft Windows 95 和 Microsoft Windows 98)上将失败。

由于 XMLHTTP 内部使用 WinInet,所以不支持在服务器端应用程序(例如 Active Server Pages (ASP))、宿主在 COM+ 中的组件,或 Windows 服务中使用 XMLHTTP。 有关其他信息,请单击下面的文章编号,以查看 Microsoft 知识库中相应的文章:
238425 (http://support.microsoft.com/kb/238425/ ) 不支持在服务中使用 WinInet

4. XMLHTTP 和 ServerXMLHTTP 之间的区别是什么?

XMLHTTP 为客户端应用程序而设计,并依赖于基于 Microsoft Win32 Internet (WinInet) 而构建的 URLMon。ServerXMLHTTP 为服务器应用程序而设计,并依赖于新的 HTTP 客户端堆栈 WinHTTP。ServerXMLHTTP 提供了可靠性和安全性,并且是服务器安全的。有关更多信息,请参见 MSXML 软件开发工具包 (SDK) 文档。

5. 如何在 XMLHTTP 和 ServerXMLHTTP 之间做出选择?

正如其名称所示,ServerXMLHTTP 推荐用于服务器应用程序,而 XMLHTTP 推荐用于客户端应用程序。XMLHTTP 具有一些优点,如支持缓存和自动发现代理。它可以在 Windows 95 和 Windows 98 平台上使用,并且非常适合单用户桌面应用程序。


6. 什么是代理配置实用工具?

WinHTTP 代理配置实用工具 Proxycfg.exe 允许将 WinHTTP 配置为通过代理服务器访问 HTTP 和 HTTPS 服务器。由于 ServerXMLHTTP 组件依赖于 WinHTTP 代理设置,因此在部署和安装使用 WinHTTP 的应用程序的过程中,管理员可以使用 Proxycfg.exe 实用工具。有关更多信息,请参见下面的 Microsoft 知识库文章:
289481 (http://support.microsoft.com/kb/289481/ ) 可能需要运行 Proxycfg 工具以使 ServerXMLHTTP 正常工作
7. ServerXMLHTTP 是否支持 SSL 和数字证书?

ServerXMLHTTP 和 XMLHTTP 组件在 MSXML3 中对 HTTPS 的支持比较有限。具体说就是,它们不完全支持用于身份验证的安全套接字层 (SSL) 证书。这些组件虽然支持 HTTPS 协议,但如果服务器要求客户端证书,请求将会失败。

ServerXMLHTTP 在 MSXML 3.0 Service Pack 1 中包括了 SSL 证书支持。


8. ServerXMLHTTP 有什么优点?• 通过使用 ServerXMLHTTP,可以在本地和远程系统之间以流或 XML 文档的形式交换 XML 数据。
• 由于基础协议为 HTTP 或 HTTPS,因此可以在防火墙后的系统之间交换数据。
• ServerXMLHTTP 可用于从不同的环境(如 Active Server Pages (ASP)、Microsoft Visual Basic 和 Microsoft Visual C++)发送 HTTP 请求。

9. ServerXMLHTTP 存在什么限制?

可同时存在于单一进程中的 ServerXMLHTTP 实例数主要取决于可用于系统上应用程序的内存大小。但是,其他因素(如 CPU 处理能力或者可用的套接字连接)会进一步限制可以同时处于活动状态的实例数。

就 MSXML 3.0 而言,可同时存在于单一进程中的最大实例数为 5,460。


10. 在哪里可以找到有关 ServerXMLHTTP 的更多信息?

本文的大部分信息都取自 MSXML SDK,它可以从以下 MSDN 网站的 XML 部分下载:
http://msdn.microsoft.com/xml/default.aspx (http://msdn.microsoft.com/xml/default.aspx )

XMLHTTP传值如何在固定时间内没有取到返回值后自己中断

function send(url)
Dim xml
Set xml = Server.CreateObject("Microsoft.XMLHTTP")     
xml.Open "GET", url, False
xml.Send
if xml.responseText<>"" then
send=xml.responseText'获得返回值
else
send="NO"'无法获得返回值
end if
Set xml = Nothing
end function
   
   
上面是同步方式发送数据,但是当无法得到返回值的时候就一直等待服务器的响应,这样很容易把服务器拖垮,我想设置在固定时间内(如30s)如果没有得到返回值就中断操作。
   
听说这要在异步方式下才能做到,但除了改这个参数,如何进行其它的步骤?
________________________________________________
可以试试ServerXMLHTTP
   
Dim xmlServerHttp
Set xmlServerHttp = Server.CreateObject("Msxml2.ServerXMLHTTP")   
Dim lResolve, lConnect, lSend, lReceive
lResolve = 5 * 1000
lConnect = 5 * 1000
lSend = 15 * 1000
lReceive = 15 * 1000
xmlServerHttp.setTimeouts lResolve, lConnect, lSend, lReceive
xmlServerHttp.open "GET", "http://localhost/sample.xml ", False
xmlServerHttp.send

MSXML2.ServerXMLHTTP使用实例
<%
'使用范例
'读取URL 的HTML
dim myHttp
set myHttp=new xhttp
myHttp.URL="http://www.baidu.com "
Response.Write(myHttp.html)
'保存远程图片到本地
myHttp.URL="http://www.baidu.com/img/logo.gif "
myHttp.saveimage "myfile.gif"
'为防止xhttp卡死的情况,使用超时,错误处理
dim sHtmlcode,iStep
myHttp.URL="http://www.hrbshopping.com "
sHtmlcode=myHttp.html
iStep=0
do while myHttp.xhttpError=""
Response.Write("ERROR: AGAIN!<br />")
sHtmlcode=myHttp.html
iStep=iStep+1
if iStep=1 then
Response.Write("ERROR:OVER!<hr />")
exit do
end if
loop
Response.Write(sHtmlcode)
set myHttp=nothing

'--------------------------------------------------------------------
Class xhttp
private cset,sUrl,sError
Private Sub Class_Initialize()
'cset="UTF-8"
cset="GB2312"
sError=""
end sub

Private Sub Class_Terminate()
End Sub

Public Property LET URL(theurl)
sUrl=theurl
end property
public property GET BasePath()
BasePath=mid(sUrl,1,InStrRev(sUrl,"/")-1)
end property
public property GET FileName()
FileName=mid(sUrl,InStrRev(sUrl,"/")+1)
end property
public property GET Html()
Html=BytesToBstr(getBody(sUrl))
end property

public property GET xhttpError()
xhttpError=sError
end property

private Function BytesToBstr(body)
on error resume next
'Cset:GB2312 UTF-8
dim objstream
set objstream = Server.CreateObject("adodb.stream")
with objstream
.Type = 1 '
.Mode = 3 '
.Open    
.Write body '
.Position = 0 '
.Type = 2 '
.Charset = Cset '
BytesToBstr = .ReadText '
.Close
end with
set objstream = nothing
End Function

private function getBody(surl)
on error resume next
dim xmlHttp
'Set xmlHttp=server.createobject("Msxml2.XMLHTTP.4.0")
'set xmlHttp=server.createobject("Microsoft.XMLHTTP")
set xmlHttp=server.createobject("MSXML2.ServerXMLHTTP")
xmlHttp.setTimeouts 10000,10000,10000,30000
xmlHttp.open "GET",surl,false
xmlHttp.send
if xmlHttp.readystate=4 then
'if xmlHttp.status=200 then
   getBody=xmlhttp.responsebody
'end if
   else
   getBody=""
end if

if Err.Number<>0 then
sError=Err.Number
Err.clear
else
sError=""
end if
set xmlHttp=nothing
end function

Public function saveimage(tofile)
on error resume next
dim objStream,imgs
imgs=getBody(sUrl)
Set objStream = Server.CreateObject("ADODB.Stream")
with objStream
.Type =1
.Open
.write imgs
.SaveToFile server.mappath(tofile),2
.Close()
end with
set objstream=nothing
end function
end class
%>

分享到:
评论

相关推荐

    将WEB程序模版等批量从gbk转utf-8/big5

    全功能转换GBK,BIG5,UTF-8软件,方便各位转换ASP,PHP源码。 很多朋友都在问要utf或者big5的插件,在此送上本人网上找到的一款免费软件,优点是可以快速的转换文档编码,而且一次性输入目录之后会自动查找目录下要转换的...

    PHP+ASP版汉字转拼音源码-

    * 汉字转拼音,自动识别GBK\UTF-8 * PHP版汉字转拼音类的说明: * 1.)根据网上汉字拼音字典库修改而成。 * 2.)包括了常用的GBK汉字:共20901字,131K. * 3.)每种拼音为一行,如果需要增加新字库,在对应行后面...

    asp模板生成调用类(GBK+UTF-8)

    asp模板生成调用类(GB2312+UTF-8) 里面包含了2种编码的文件, 里面是个人在测试时的代码,具体数据库和一些文件没放在压缩包里,只供参考

    文件编码转换 utf8转gbk gbk转utf8

    在eclipse编程过程中,如果遇到乱码问题,可以讲此工程放置到workspace目录下进行转码,但是使用者需对代码中的文件路径进行相应的修改。 使用时,需将要转码的文件放到一个文件夹中,在workspace中新建一个system...

    Asp获取网页源码,支持GB2312、utf-8

    小巧好用,没有乱码,无错误。 调用方法: UrlCode = getHTTPPage("http://www.xxx.com/")

    飞天下载系统FTDMS ASP V5.0 UTF-8 build110507.rar

    【功能简介】  1、采用静态缓存技术,所有面页均由ASP快速一次性生成HTM。  2、采用符合Web2.0标准的XHTML CSS开发而成。  3、生成所有页面均能通过XHTML CSS校验!...8、新增可以引用他人站点下载地址功能.

    客齐齐企业网站KQIQIECMS 2.3 简体UTF-8.rar

    客齐齐企业网站KQIQIECMS基于ASP Access技术开发的企业内容管理系统。系统主模块:产品,资讯,单页面,招聘,留言。其中产品和资讯支持自定义字段。...8.循环标签调用更新调用方法 9.修正已知BUG。

    JS+小程序 汉字与gbk2312编码互转

    例:中 D6D0 国 B9FA http://www.mytju.com/classcode/tools/encode_gb2312.asp 开发小程序蓝牙时,发送中文,硬件蓝牙要求gbk2312转码,我费了九牛二虎之力,终于找到简单有效的方法

    客齐齐asp企业内容管理系统(生成静态)v2.3UTF-8

    基于ASP Access/Mssql技术开发的企业内容管理系统。系统主模块:产品,资讯,单页面,招聘,留言。产品,资讯,留言,单页模块支持自定义字段。系统列表页支持动态,伪静态。内容页支持动态,伪静态,生成静态。代码和...

    QCMS小型网站管理系统 v1.4 sp1 UTF-8 ACCESS 正式版.rar

    10月22号更新:更新了编码问题,导致GBK版本在设置参数后网站一片空白的BUG,并且增加全局关键字标签,全局简介标签,全局编码标签  SP1改进 后台添加内容-上传缩略图显示乱码 2 留言提交有错误 3 验证码在部分主机...

    支付宝wap支付

    手机网站支付接口(alipay.wap.create.direct.pay.by.user).pdf

    支付宝网上支付接口(即时到账接口开发文档及其代码实例)

    提供最全的支付宝即时到账接口开发文档及其代码实例,里面包含了ASP,PHP(GBK和UTF-8两个版本),.NET(GBK和UTF-8两个版本),JAVA(GBK和UTF-8两个版本),共计7个版本的接口实例。 附带两个PDF: 一个PDF是图解操作...

    QCMS小型网站管理系统 v1.4 sp1 UTF-8 MSSQL 正式版.rar

    QCMS是一个小型网站管理系统,灵活,方便是最大特色,为初学者快速度架设网站首选。...10月22号更新:更新了编码问题,导致GBK版本在设置参数后网站一片空白的BUG,并且增加全局关键字标签,全局简介标签,全局编码标签

    文件编码批量转换程序

    '* BIG5 进行 UTF-8 编码,只能对 GBK 进行 UTF-8 转换,使之看起来 '* 象一个繁体字文件。 '* '* 最后修改:2006/06/15 '* '***************************************************************** 使用说明: ...

    支付宝支付调用接口(Java php asp asp.net)

    支付宝支付调用接口 下面有二个说明文档 支持 java php asp asp.net 支持utf-8 gbk字符编码

    支付宝支付接口

    │ ├─create_direct_pay_by_user-ASP-UTF-8 │ │ ├─class │ │ ├─images │ │ └─log │ ├─create_direct_pay_by_user-CSHARP-GBK │ │ ├─app_code │ │ ├─images │ │ └─log │ ├─create_...

    html,asp,php编码批量转换工具

    '***************************************************************** '* 软件名称:GB/BIG5/UTF-8 文件编码批量转换程序 ...'* BIG5 进行 UTF-8 编码,只能对 GBK 进行 UTF-8 转换,使之看起来 '* 象一个繁体字文件。

    ASP实例开发源码-Nowayerwebftp v1.2 gbk+utf8 Asp网页版FTP程序.zip

    ASP实例开发源码—Nowayerwebftp v1.2 gbk+utf8 Asp网页版FTP程序.zip ASP实例开发源码—Nowayerwebftp v1.2 gbk+utf8 Asp网页版FTP程序.zip ASP实例开发源码—Nowayerwebftp v1.2 gbk+utf8 Asp网页版FTP程序.zip

    actcms-gbk.rar_asp cms_site:www.pudn.com_唯一_版本管理

    ACTCMS是一款具有强大的功能的基于ASP语言的开源内容管理软件,有UTF-8和GB2132两个编码版本,支持ACCESS和MSSQL两种数据库。ACTCMS是一款完全开源的程序,都毫无保留的完全开放源代码,用户不需额外安装其他DLL组件...

    5ucms移动端插件(手机版) v1.0.zip

    此插件有两种编码,根据你当前系统使用的编码来选择(UTF-8 和 GBK)! 选择试用的编码文件夹覆盖到你的网址根目录,访问 http://域名/m/ 即可 无需安装,覆盖即可使用,后台插件有[移动管理] 可以开启关闭移动端...

Global site tag (gtag.js) - Google Analytics