XML通过HTTP发送的网页版微信怎么发送文件脚本问题,怎么解决

Web开发常见的几个漏洞解决方法 - 伍华聪 - 博客园
随笔 - 565, 文章 - 20, 评论 - 7628, 引用 - 20
平时工作,多数是开发Web项目,由于一般是开发内部使用的业务系统,所以对于安全性一般不是看的很重,基本上由于是内网系统,一般也很少会受到攻击,但有时候一些系统平台,需要外网也要使用,这种情况下,各方面的安全性就要求比较高了,所以往往会交付给一些专门做安全测试的第三方机构进行测试,然后根据反馈的漏洞进行修复,如果你平常对于一些安全漏洞不够了解,那么反馈的结果往往是很残酷的,迫使你必须在很多细节上进行修复完善。本文主要根据本人项目的一些第三方安全测试结果,以及本人针对这些漏洞问题的修复方案,介绍在这方面的一些经验,希望对大家有帮助。
基本上,参加的安全测试(渗透测试)的网站,可能或多或少存在下面几个漏洞:SQL注入漏洞、跨站脚本攻击漏洞、登陆后台管理页面、IIS短文件/文件夹漏洞、系统敏感信息泄露。
1、测试的步骤及内容
这些安全性测试,据了解一般是先收集数据,然后进行相关的渗透测试工作,获取到网站或者系统的一些敏感数据,从而可能达到控制或者破坏系统的目的。
第一步是信息收集,收集如IP地址、DNS记录、软件版本信息、IP段等信息。可以采用方法有:  1)基本网络信息获取;  2)Ping目标网络得到IP地址和TTL等信息;  3)Tcptraceroute和Traceroute 的结果;  4)Whois结果;  5)Netcraft获取目标可能存在的域名、Web及服务器信息;  6)Curl获取目标Web基本信息;  7)Nmap对网站进行端口扫描并判断操作系统类型;  8)Google、Yahoo、Baidu等搜索引擎获取目标信息;  9)FWtester 、Hping3 等工具进行防火墙规则探测;  10)其他。
第二步是进行渗透测试,根据前面获取到的数据,进一步获取网站敏感数据。此阶段如果成功的话,可能获得普通权限。采用方法会有有下面几种
  1)常规漏洞扫描和采用商用软件进行检查;  2)结合使用ISS与Nessus等商用或免费的扫描工具进行漏洞扫描;  3)采用SolarWinds对网络设备等进行搜索发现;  4)采用Nikto、Webinspect等软件对Web常见漏洞进行扫描;  5)采用如AppDetectiv之类的商用软件对数据库进行扫描分析;  6)对Web和数据库应用进行分析;  7)采用WebProxy、SPIKEProxy、Webscarab、ParosProxy、Absinthe等工具进行分析;  8)用Ethereal抓包协助分析;  9)用Webscan、Fuzzer进行SQL注入和XSS漏洞初步分析;  10)手工检测SQL注入和XSS漏洞;  11)采用类似OScanner的工具对数据库进行分析;  12)基于通用设备、数据库、操作系统和应用的攻击;采用各种公开及私有的缓冲区溢出程序代码,也采用诸如MetasploitFramework 之类的利用程序集合。  13)基于应用的攻击。基于Web、数据库或特定的B/S或C/S结构的网络应用程序存在的弱点进行攻击。  14)口令猜解技术。进行口令猜解可以采用 X-Scan、Brutus、Hydra、溯雪等工具。
第三步就是尝试由普通权限提升为管理员权限,获得对系统的完全控制权。在时间许可的情况下,必要时从第一阶段重新进行。采用方法
  1)口令嗅探与键盘记录。嗅探、键盘记录、木马等软件,功能简单,但要求不被防病毒软件发觉,因此通常需要自行开发或修改。  2)口令破解。有许多著名的口令破解软件,如 L0phtCrack、John the Ripper、Cain 等
以上一些是他们测试的步骤,不过我们不一定要关注这些过程性的东西,我们可能对他们反馈的结果更关注,因为可能会爆发很多安全漏洞等着我们去修复的。
2、SQL注入漏洞的出现和修复
&1)SQL注入定义:
  SQL注入攻击是黑客对数据库进行攻击的常用手段之一。随着B/S模式应用开发的发展,使用这种模式编写应用程序的程序员也越来越多。但是由于程序员的水平及经验也参差不齐,相当大一部分程序员在编写代码的时候,没有对用户输入数据的合法性进行判断,使应用程序存在安全隐患。用户可以提交一段数据库查询代码,根据程序返回的结果,获得某些他想得知的数据,这就是所谓的SQL Injection,即SQL注入。
  SQL注入有时候,在地址参数输入,或者控件输入都有可能进行。如在链接后加入&号,页面报错,并暴露出网站的物理路径在很多时候,很常见,当然如果关闭了Web.Config的CustomErrors的时候,可能就不会看到。
另外,Sql注入是很常见的一个攻击,因此,如果对页面参数的转换或者没有经过处理,直接把数据丢给Sql语句去执行,那么可能就会暴露敏感的信息给对方了。如下面两个页面可能就会被添加注入攻击。
①HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestD ... type='U' and status&0)&0 得到第一个用户建立表的名称,并与整数进行比较,显然abc.asp工作异常,但在异常中却可以发现表的名称。假设发现的表名是xyz,则②HTTP://xxx.xxx.xxx/abc.asp?p=YY and (select top 1 name from TestDB.dbo.sysobjects& ... tatus&0 and name not in('xyz'))&0 可以得到第二个用户建立的表的名称,同理就可得到所有用建立的表的名称。
为了屏蔽危险Sql语句的执行,可能需要对进行严格的转换,例如如果是整形的,就严格把它转换为整数,然后在操作,这样可以避免一些潜在的危险,另外对构造的sql语句必须进行Sql注入语句的过滤,如我的框架(Winform开发框架、Web开发框架等)里面就内置了对这些有害的语句和符号进行清除工作,由于是在基类进行了过滤,因此基本上子类都不用关心也可以避免了这些常规的攻击了。
/// &summary&
/// 验证是否存在注入代码(条件语句)
/// &/summary&
/// &param name="inputData"&&/param&
public bool HasInjectionData(string inputData)
if (string.IsNullOrEmpty(inputData))
return false;
//里面定义恶意字符集合
//验证inputData是否包含恶意集合
if (Regex.IsMatch(inputData.ToLower(), GetRegexString()))
return true;
return false;
/// &summary&
/// 获取正则表达式
/// &/summary&
/// &returns&&/returns&
private static string GetRegexString()
//构造SQL的注入关键字符
string[] strBadChar =
//"select\\s",
//"from\\s",
"insert\\s",
"delete\\s",
"update\\s",
"drop\\s",
"truncate\\s",
"exec\\s",
"count\\(",
"declare\\s",
"char\\(",
"net user",
"xp_cmdshell",
"/add\\s",
"exec master.dbo.xp_cmdshell",
"net localgroup administrators"
//构造正则表达式
string str_Regex = ".*(";
for (int i = 0; i & strBadChar.Length - 1; i++)
str_Regex += strBadChar[i] + "|";
str_Regex += strBadChar[strBadChar.Length - 1] + ").*";
return str_R
上面的语句用于判别常规的Sql攻击字符,我在数据库操作的基类里面,只需要判别即可,如下面的一个根据条件语句查找数据库记录的函数。
/// &summary&
/// 根据条件查询数据库,并返回对象集合
/// &/summary&
/// &param name="condition"&查询的条件&/param&
/// &param name="orderBy"&自定义排序语句,如Order By Name Desc;如不指定,则使用默认排序&/param&
/// &param name="paramList"&参数列表&/param&
/// &returns&指定对象的集合&/returns&
public virtual List&T& Find(string condition, string orderBy, IDbDataParameter[] paramList)
if (HasInjectionData(condition))
LogTextHelper.Error(string.Format("检测出SQL注入的恶意数据, {0}", condition));
throw new Exception("检测出SQL注入的恶意数据");
...........................
以上只是防止Sql攻击的一个方面,还有就是坚持使用参数化的方式进行赋值,这样很大程度上减少可能受到SQL注入攻击。
Database db = CreateDatabase();
DbCommand command = db.GetSqlStringCommand(sql);
command.Parameters.AddRange(param);
3、跨站脚本攻击漏洞出现和修复
&跨站脚本攻击,又称XSS代码攻击,也是一种常见的脚本注入攻击。例如在下面的界面上,很多输入框是可以随意输入内容的,特别是一些文本编辑框里面,可以输入例如&script&alert('这是一个页面弹出警告');&/script&这样的内容,如果在一些首页出现很多这样内容,而又不经过处理,那么页面就不断的弹框,更有甚者,在里面执行一个无限循环的脚本函数,直到页面耗尽资源为止,类似这样的攻击都是很常见的,所以我们如果是在外网或者很有危险的网络上发布程序,一般都需要对这些问题进行修复。
XSS代码攻击还可能会窃取或操纵客户会话和 Cookie,它们可能用于模仿合法用户,从而使黑客能够以该用户身份查看或变更用户记录以及执行事务。[建议措施]清理用户输入,并过滤出 JavaScript 代码。我们建议您过滤下列字符: [1] &&(尖括号)[2] "(引号)[3] '(单引号)[4] %(百分比符号)[5] ;(分号)[6] ()(括号)[7] &(& 符号)[8] +(加号)
为了避免上述的XSS代码攻击,解决办法是可以使用HttpUitility的HtmlEncode或者最好使用微软发布的AntiXSSLibrary进行处理,这个更安全。
微软反跨站脚本库(AntiXSSLibrary)是一种编码库,旨在帮助保护开发人员保护他们的基于Web的应用不被XSS攻击。&
HtmlEncode(String)
不受信任的HTML代码。
&a href=&http://www.cnblogs.com&&Click Here [不受信任的输入]&/a&
HtmlAttributeEncode(String)
不受信任的HTML属性
&hr noshade size=[不受信任的输入]&
JavaScriptEncode(String)
不受信任的输入在JavaScript中使用
&script type=&text/javascript&&
[Untrusted input]
UrlEncode(String)
不受信任的URL
&a href=&http://cnblogs.com/results.aspx?q=[Untrusted input]&&Cnblogs.com&/a&
VisualBasicScriptEncode(String)
不受信任的输入在VBScript中使用
&script type=&text/vbscript& language=&vbscript&&
[Untrusted input]
XmlEncode(String)
不受信任的输入用于XML输出
&xml_tag&[Untrusted input]&/xml_tag&
XmlAttributeEncode(String)
不 受信任的输入用作XML属性
&xml_tag attribute=[Untrusted input]&Some Text&/xml_tag&
protected void Page_Load(object sender, EventArgs e)
this.lblName.Text = Encoder.HtmlEncode("&script&alert('OK');&/SCRIPT&");
例如上面的内容,赋值给一个Lable控件,不会出现弹框的操作。
但是,我们虽然显示的时候设置了转义,输入如果要限制它们怎么办呢,也是使用AntiXSSLibrary里面的HtmlSanitizationLibrary类库Sanitizer.GetSafeHtmlFragment即可。
protected void btnPost_Click(object sender, EventArgs e)
this.lblName.Text = Sanitizer.GetSafeHtmlFragment(txtName.Text);
这样对于特殊脚本的内容,会自动剔除过滤,而不会记录了,从而达到我们想要的目的。
4、IIS短文件/文件夹漏洞出现和修复
通过猜解,可能会得出一些重要的网页文件地址,如可能在/Pages/Security/下存在UserList.aspx和MenuList.aspx文件。
[建议措施]1)禁止url中使用&~&或它的Unicode编码。2)关闭windows的8.3格式功能。
修复可以参考下面的做法,或者找相关运维部门进行处理即可。
5、系统敏感信息泄露出现和修复
如果页面继承一般的page,而没有进行Session判断,那么可能会被攻击者获取到页面地址,进而获取到例如用户名等重要数据的。
一般避免这种方式是对于一些需要登录才能访问到的页面,一定要进行Session判断,可能很容易给漏掉了。如我在Web框架里面,就是继承一个BasePage,BasePage 统一对页面进行一个登录判断。
public partial class UserList : BasePage
protected void Page_Load(object sender, EventArgs e)
...............
/// &summary&
/// BasePage 集成自权限基础抽象类FPage,其他页面则集成自BasePage
/// &/summary&
public class BasePage : FPage
/// &summary&
/// 默认构造函数
/// &/summary&
public BasePage()
this.IsFunctionControl = true;//默认页面启动权限认证
/// &summary&
/// 检查用户是否登录
/// &/summary&
private void CheckLogin()
if (string.IsNullOrEmpty(Permission.Identity))
string url = string.Format("{0}/Pages/CommonPage/Login.aspx?userRequest={1}",
Request.ApplicationPath.TrimEnd('/'), HttpUtility.UrlEncode(Request.Url.ToString()));
Response.Redirect(url);
/// &summary&
/// 覆盖HasFunction方法以使权限类判断是否具有某功能点的权限
/// &/summary&
/// &param name="functionId"&&/param&
/// &returns&&/returns&
protected override bool HasFunction(string functionId)
CheckLogin();
bool breturn = false;
breturn = Permission.HasFunction(functionId);
catch (Exception)
Helper.Alerts(this, "BasePage调用权限系统的HasFunction函数出错");
protected override void OnInit(EventArgs e)
Response.Cache.SetNoStore(); //清除缓存
base.OnInit(e);
CheckLogin();
否则可能会受到攻击,并通过抓包软件发现页面数据,获得一些重要的用户名或者相关信息。
还有一个值得注意的地方,就是一般这种不是很安全的网络,最好要求输入比较复杂一点的密码(强制要求),例如不能全部是数字密码或者不能是纯字符,对位数也要求多一点,因为很多人输入456,123这样的密码,很容易被猜出来并登录系统,造成不必要的损失。
6、总结性建议
针对上面发现的问题,提出下面几条建议。
1)在服务器与网络的接口处配置防火墙,用于阻断外界用户对服务器的扫描和探测。2)限制网站后台访问权限,如:禁止公网IP访问后台;禁止服务员使用弱口令。3)对用户输入的数据进行全面安全检查或过滤,尤其注意检查是否包含SQL 或XSS特殊字符。这些检查或过滤必须在服务器端完成。4)关闭windows的8.3格式功能。5)限制敏感页面或目录的访问权限。(一) Access Denied
TomoSoft ID Number: Q
Article last modified on 11-22-2001
The information in this article applies to:
Microsoft XML, versions 2.6, 3.0, 3.0 sp1
现在我们越来越离不开XMLHTTP对象和ServerXMLHTTP对象了。为了更好地驾驭,一定要搞清楚她们的特性,以及在何种情况下她们会闹别扭。
本文尽可能地给出她们的出错的各项相关报告。由于我自己的个人经验教训,我更关注“Access Denied”这个话题。其他方面的报告请各方高士整理一下了。
我们将会混着XMLHTTP和ServerXMLHTTP说,虽然她们从底层协议到特性均不相同,但是她们的共同之处还是挺多的。
“ACCESS DENIED”和“Permission Denied”
如果我们用ServerXMLHTTP对象访问一个用了集成Windows验证的web站点时,传递的NT用户名密码无效或者没有相应的权限,自然会遭遇到Access Denied,这一点毋庸置疑。
也就是说,虽然微软没有禁止传递空的用户名密码,但是实践证明这么做,可能会给你带来点麻烦。
我的一次经历就是我当前的子线程会默认从父线程那里继承Security Context,而父线程的用户身份是有权限的,但是子线程调用ServerXMLHTTP对象提交一个HTTP操作,就会得到一个“Access Denied”。那里我就是没有传递用户名和密码。
所以我们的第一个定理就是:
定理1 但凡你能在XMLHTTP或者ServerXMLHTTP的open方法时传递用户名密码,就请一定传,即使这时的进程的运行身份是邮件管理员。
它附带的一个推论是:
即使你曾经给open方法传递空用户名密码测试成功,也不意味着未来在其他环境中同样的代码仍然可以奏效。
有时候,你在XMLHTTP或ServerXMLHTTP的open时传递的NT用户名密码,它是有权限执行该项HTTP操作的,但是它偏偏也报告“Access Denied”。这又是为什么呢?
微软的一种解释就是,这是由它们的底层实现的特性所决定的。:)
对于XMLHTTP:
当XMLHTTP对象向一个Remote URL发送HTTP请求时,它用的是the Internet Explorer URLMON和WinInet组件。因为这些组件是被设计在“A Regular User Process”这种情况下使用的,而IIS和ASP会对URLMON和WinInet的某些功能性造成不良影响。
所以微软说,不赞成在ASP脚本页面中使用“Microsoft.XMLHTTP”对象(即XMLHttpRequest)来向其他Web Servers发送请求。因为这可能导致一些无法预料的后果,如肯定是不能连接SSL(HTTPS) Server的,等等。
这个问题在Knowledge Base 的Q304420一文中也有论述。在这篇《XMLHTTP Open Method Fails with "Permission Denied" Error》的文章中,描述的现象就是:
虽然文章没有说为什么,但是我相信就是上面所阐述的道理。
所以依照微软的建议,这里有了定理2:
如果你要从Server-Side ASP script中做一个HTTP请求,请使用ServerXMLHTTP对象。
对于ServerXMLHTTP:
MSXML 3.0使用的是Windows HTTP Services(WinHTTP)。
如果在调用ServerXMLHTTP代码的机器上,WinHTTP Proxy configuration setting没有配置或者没有正确配置,都会造成“Access Denied”!
这是因为ServerXMLHTTP对象需要依赖于WinHTTP来建立server-to-server的HTTP连接。这时可能会有两种可能:
一是没有运行Proxycfg.EXE来正确地设置proxy setting;
二是在运行Proxycfg.EXE配置之后,没有重新启动IIS。
客户端Http请求失败原因总结
HTTP请求错误大全总结
HTTP请求错误码大全
服务器相关 HTTP 请求错误
HTTP请求错误集合
HTTP请求错误大全
Xcode7发送http请求失败的问题
iOS iOS9 HTTP请求失败
常见HTTP请求错误
XMLHttpRequset发送GET请求
没有更多推荐了,import java.io.BufferedR
import java.io.InputS
import java.io.InputStreamR
import java.io.PrintW
import java.net.HttpURLC
import java.net.URL;
import java.util.regex.M
import java.util.regex.P
public class HttpXmlUtil {
private String method = "POST";
private String charset = "UTF-8";
private String contentType = "text/xml";
public String sendXmlMsg(String address, String xmlMsg) throws Exception {
StringBuilder sb = new StringBuilder();
URL url = new URL(address);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setRequestMethod(method);
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setInstanceFollowRedirects(true);
conn.setRequestProperty("Content-Type", contentType);
conn.connect();
// 向输出流写出数据
PrintWriter pw = new PrintWriter(conn.getOutputStream());
pw.write(xmlMsg);
pw.flush();
pw.close();
String contentType = conn.getContentType();
Pattern pattern = Pattern.compile("charset=.*:?");
Matcher matcher = pattern.matcher(contentType);
if (matcher.find()) {
charset = matcher.group();
if (charset.endsWith(";")) {
charset = charset.substring(charset.indexOf("=") + 1, charset.indexOf(";"));
charset = charset.substring(charset.indexOf("=") + 1);
if (charset.contains("\"")) {
charset = charset.substring(1, charset.length() - 1);
charset = charset.trim();
InputStream inStream = conn.getInputStream();
BufferedReader ufferedReader = new BufferedReader(new InputStreamReader(inStream, charset));
while ((line = ufferedReader.readLine()) != null) {
sb.append(line);
ufferedReader.close();
conn.disconnect();
return sb.toString();
httpclient发送post xml请求参数据,对响应的xml做处理
HttpClient4.5.2通过POST发送XML
java通过HTTP接收xml和返回xml
PostMan使用模拟http请求 发送xml报文请求
HTTP请求发送XML数据
没有更多推荐了,怎么利用xmlhttp组件获取网页,具体步骤该怎么做,说详细点,谢谢。_百度知道
怎么利用xmlhttp组件获取网页,具体步骤该怎么做,说详细点,谢谢。
要编程吗?...
要编程吗?
答题抽奖
首次认真答题后
即可获得3次抽奖机会,100%中奖。
获赞数:26
擅长:暂未定制
当send方法成功后才可调用该方法。如果服务器返回的文档类型为&text/xml&, 则这句话xmlhttp.getResponseHeader(&Content-Type&);将返回字符串&text/xml&。 可以使用getAllResponseHeaders方法获取完整的http头信息。 Xmlhttp是一种浏览器对象, 可用于模拟http的GET和POST请求。配合JavaScript可以实现页面数据在无刷新下的定时数据更 新,如果应用在聊天室、文字直播上可以取得较好的视觉效果。 IE中的 XmlHttp对象 在IE中XmlHttp被实现为ActiveX对象,通常使用 var xmlhttp = new ActiveXObject(&Msxml2.XMLHTTP&); 来创建一个对象,然后使用该对象的open方法来发出一个Http请求。 xmlhttp.open(&GET&, fragment_url); 这时候浏览器已经发出了Http请求,我们需要注册一个匿名函数给XmlHttp对象的onreadystatechange方法,这样当请求返回 时,xmlhttp就会自动调用我们注册的这个函数,下边是一个实际的例子。 xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.innerHTML = xmlhttp.responseT } } 因为我们不需要再发送任何信息,所以用下边的语句结束 xmlhttp.send(null); 我们将上边的过程封装为一个函数,下边是这个函数的完整代码: function loadFragmentInToElement(fragment_url, element_id) { var element = document.getElementById(element_id); var xmlhttp = new ActiveXObject(&Msxml2.XMLHTTP&); xmlhttp.open(&GET&, fragment_url); xmlhttp.onreadystatechange = function() { if (xmlhttp.readyState == 4 && xmlhttp.status == 200) { element.innerHTML = xmlhttp.responseT } } xmlhttp.send(null);PHPMORE VOL5 24/26 } 函数的调用方法如下所示: loadFragmentInToElement( , DynamicContent_id ); 有了上边的代码, 再配合JavaScript的定时函数, 我们就可以实现定时的无刷新数据更新了, 下边这个函数每隔5秒对element_id 的数据进行一次更新。 function refresh( element_id ) { loadFragmentInToElement( show.php , + element_id ); setTimeout( &refresh(ts)& , 5000 ); } 在 IE上使用XmlHttp要注意的问题 特别要注意的是由于IE的Cache的关系,我们看见的XmlHttp并不总是最新读取的那一个,为了让IE不启用Cache,我们发送给 IE一个特殊的Header,用PHP实现如下: header( &Expires: Mon, 26 Jul :00 GMT& ); header( &Last-Modified: & . gmdate( &D, d M Y H:i:s& ) . &GMT& ); header( &Cache-Control: no-cache, must-revalidate& ); header( &Pragma: no-cache& ); XmlHttp对象在Gecko上的实现 Gecko上的XmlHttp和IE上略有不同,它并不需要通过ActiveX来创建。另外回调函数必须在open方法之前注册,而IE并不要 求,这是一个很需要注意的问题。 使用JavaScript实现XmlHttp的跨浏览器应用 为了能在多种浏览器上有一个统一的实现, 我们可以用JavaScript来对不同浏览器的差异进行封装。 这里我们采用Andrew Gregory 的实现。首先我们要引用Andrew Gregory的一个名为xmlhttprequest.js的Js脚本。 然后在创建XmlHttp对象时统一使用new XMLHttpRequest()就可以了; 其它的方法不用改变。 这个Js脚本运行我们在IE、 Gecko (Mozilla/FireFox) 和Opera的特定版本使用XmlHttp。下边是调整后的loadFragmentInToElement函数, 这个函数在IE6 和FireFox1.0pre上运行通过。 xmlhttprequest.js文件和具体的使用例子可以在我写的一个DEMO中找到。 XmlHttp中的中文乱码问题 在默认情况下,XmlHttp都是使用Utf-8字符集,而我们使用的多是GB2312字符集,这就要求我们进行GB2312到Utf-8的转码。 PHP提供了一个可选的专码模块,可以实现多种字符集之间的相互转化。加载这个专码模块的方法如下: 打开 PHP 配置文件 php.ini,将 ;extension=php_mbstring.dll(*nix 是 php_mbstring.so) 前的分号去掉。重新启动 Apache以后,这个模块就可以使用了。如果有错误出现,请检查扩展目录的路径设置是否正确。 加载这个模块以后,我们就可以使用mb_convert_encoding函数来转码了: $utf8_string = mb_convert_encoding( $gb_string , UTF-8 , GB2312 ); 将转码后的字符输出就可以看见正确显示的中文 我是做网站建设和asp.net程序培训的 桂林网站建设:简单描述如果在javascript下使用XMLHTTP对象.MSXML中提供了Microsoft.XMLHTTP对象,能够完成从数据包到Request对象的转换以及发送任务。1.创建XMLHTTP对象: (1)var xmlhttp = new ActiveXObject(&Microsoft&); (2)var xmlhttp = new ActiveXObject(&MSXML1&); (3)var xmlhttp = new ActiveXObject(&MSXML2&); (4)var xmlhttp = new ActiveXObject(&MSXML3&);2.初始化: xmlhttp.open(http-method, url, async, userID, password); 其中前三个参数是必须的.
http-method: POST OR GET
url: 请求的地址,不带查询参数
async: boolean的值,说明请求是否为异步的.如果是异步通信方式(true),客户机就不等待服务器的响应;如果是同步方式(false),客户机就要等到服务器返回消息后才去执行其他操作3.设置HTTP头 xmlhttp.set(headName, headValue); 如:
xmlhttp.setRequestHeader(&Content-Type&,&application/x-www-form-urlencoded&); 可以不设置HTTP头.4.发送请求 xmlhttp.send(XML-DATA); XML-DATA可以是任意类型的值.一般用于发送查询参数,如xmlhttp.send(&type=1&color=2&);5.检查状态 XMLHTTP对象中的readyState属性能够反映出服务器在处理请求时的进展状况。客户机的程序可以根据这个状态信息设置相应的事件处理方法。属性值及其含义如下表所示:
Response对象已经创建,但XML文档上载过程尚未结束
XML文档已经装载完毕
XML文档已经装载完毕,正在处理中
部分XML文档已经解析
文档已经解析完毕,客户端可以接受返回消息6.客户机处理响应 可通过XMLHTTP对象的三个属性来获得响应:
(1)responseTxt:将返回消息作为文本字符串;
(2)responseXML:将返回消息视为XML文档,在服务器响应消息中含有XML数据时使用;
(3)responseStream:将返回消息视为Stream对象。 如:var xmlfile=xmlhttp.responseXML.documentE我是做网站建设和asp.net程序培训的 桂林网站建设:
采纳数:47
获赞数:87
擅长:暂未定制
看这里,有源码,调用就可以了
为你推荐:
其他类似问题
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。

我要回帖

更多关于 怎么把网页发送到桌面 的文章

 

随机推荐