能否用ColdFusion写一个在服务器端访问其他网站的asp文件,返回asp执行后的结果?
很惭愧,我不懂CF。虚心向各位CF版的XDJM们请教。
我用ASP写了一个网页,返回结果只是字符串的“1”或者“0”,连HTML标签也没有。
如果用客户端的AJAX访问就简单了。可是我希望用CF写的网页在它的服务器端能够使用XMLHttpRequest或其他方式访问我的ASP网页,将ASP返回的字符串(1或0)保存在CF的Session里。
要求:
1、最好写1个函数,名称是CheckAJAX,参数是访问的ASP的URL。函数内部用XMLHttpRequest或其他方式访问URL,返回ASP网页的结果,不使用异步访问。
如果用XMLHttpRequest,open方法的三个参数是"GET"、URL、false。
2、这个CF文件也需要代入两个参数:MyID和MyCode。这两个参数是提交到这个CF文件的表单中文本框的名称。
用CF实现类似下面代码的功能(我的是ASP代码):
/****开始****/
/*表单中名称为MyCode的文本框中输入了文字,asp代码*/
<%
If Request.Form("MyCode") <>"" Then
/*执行CheckAJAX函数,代入URL参数,将返回内容存入Session变量"Result"中。
/*需要加入时间戳,使不能使用缓存。ASP的Timer可以返回从半夜零点开始到现在的毫秒数
Session("Result") = CheckAJAX("http://www.AAAAA.com/Check.asp" _
"?TimeStamp=" & Timer & _
"&ID=" & Request.Form("MyID") & _
"&Code=" & Request.Form("MyCode"))
End If
%>
<p>这是HTML代码。URL返回结果是:<%=Session("Result")%></p>
/*ASP代码*/
<%
If Session("Result") = "1" Then
Response.Write("<p>是1</p>")
Else
Response.Write("<p>不是1</p>")
End If
%>
/****结束****/
3、请写出完整的包括HTML的代码。就是包括:
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head>
<body>
</body>
</html>
非常感激!
[解决办法]
<cfhttp url="http://abc.com/abc.asp" method="POST" resolveurl="YES">
<cfhttpparam name = "form_test" type = "FormField" value = "This is a form variable">
</cfhttp>
CFHTTP标签是功能最强大的CFML标签之一,它可以用来:
· 从网络上获取网页和查询结果。
· 向远程服务器,CFML模板或CGI应用程序传送数据并处理返回数据。
超文本传输协议(HTTP)处理Web服务器之间的各种通信。执行一个事务处理所采取的方法决定了服务器处理什么以及什么内容被传送给浏览器。除了HTML文档之外,HTTP还支持二进制文件,图象、音频和视频等内容类型。HTTP协议标准规定,用户的请求信息和服务器的响应信息,以及事务处理的状态信息均以请求标题和响应标题的形式被传递。HTTP协议有几种通信方法,用于在客户和服务器之间交换信息。CFHTTP标签实现了最常用的HTTP通信方法:GET和POST. CFHTTP的语法非常简单,但它提供了许多选项,用于指定输出,处理链接以及建立查询等任务。
CFHTTP的语法
CFHTTP 标签的基本语法如下:
<CFHTTP URL=" hostname"
USERNAME=" username"
PASSWORD=" password"
NAME=" queryname"
COLUMNS=" query_columns"
PATH=" path"
FILE=" filename"
METHOD=" get_or_post"
DELIMITER=" character"
TEXTQUALIFIER=" character"
RESOLVEURL=" Yes/No"
PROXYSERVER=" hostname">
</CFHTTP>
处理所获网页中的链接
要保持通过CFHTTP从Web服务器获取的网页中的相对链接,应将RESOLVEURL属性设为“Yes”。当RESOLVEURL=YES时,下列可能包含链接的标签会被处理:
· IMG SRC
· A HREF
· RORM ACTION
· APPLET CODE
· SCRIPT SRC
· EMBED SRC
· EMBED PLUGINSPACE
· BODY BACKGROUND
· FRAME SRC
· BGSOUND SRC
· OBJECT DATA
· OBJECT CLASSID
· OBJECT C0DEBASE
· OBJECT USEMAP
注意:如果获取的网页中某个URL指向一个二进制文件,则该网页不被显示。你可以输入一个路径作为PATH属性的值,从而把该二进制文件保存到本地计算机中。
使用CFHTTP的Get方法
Get方法于从指定的服务器获取文本文件或二进制文件。下面的几个例子演示了几种常用的Get操作。Get方法是一种单向的事务处理方法,CFHTTP用这种方法获得一个对象,而Post方法是双向的处理方法,CFHTTP用Post方法向ColdFusion文件或CGI程序传递变量,并接收和处理返回的数据。
例子:获取到变量中
下面的例子用Get方法请求Yahoo站点的缺省主页,并将文件内容保存到一个变量中,然后用CFOUTPUT将该变量的内容显示在浏览器中。
<CFHTTP METHOD="Get"
URL="http://www.yahoo.com/index.shtml"
RESOLVEURL="Yes">
<CFOUTPUT>
#CFHTTP.FileContent# <BR>
</CFOUTPUT>
当FILE属性和PATH属性被忽略时,ColdFusion将文件index.shtml的内容保存到变量CFHTTP.FileContent中。要注意的是,若不把RESOLVEURL属性设为“Yes”,则下载的网页中相对链接会被打断。若将该属性设为“Yes”,则相对链接会被转换为绝对链接。
例子:获取到一个文件中
下面的例子也用Get方法执行一个简单的文件请求,但PATH属性和FILE属性的使用导致下载的文件被保存到本地的文件中。
<CFHTTP METHOD = "get"
URL="http://www.yahoo.com/index.shtml"
PATH="c:\temp"
FILE="yahooindex.shtml">
注意,当使用了PATH属性和FILE属性时,RESOLVEURL属性会被忽略(即使指定了该属性,也将被忽略)。
例子:获取一个二进制文件
与上一个例子相似,这个例子也从服务器下载一个文件并保存到PATH属性和FILE属性所指定的位置。唯一的不同是被下载文件的MIME类型不一样。
<CFHTTP METHOD="Get"
URL="http://maximus/downloads/quakestuff/q2_test.zip"
PATH="c:\quake2\install"
FILE="quake2beta.zip">
<CFOUTPUT>
#CFHTTP.MimeType#
</CFOUTPUT>
CFOUTPUT代码块显示了被下载文件的MIME类型,在此例中是application/zip。
根据一个文本文件建立查询
使用CFHTTP的Get方法,你可以根据一个有分隔符的文本文件创建查询对象。这是处理生成的文本文件的一个有力方法。一旦查询对象创建之后,对查询字段的引用和处理是非常简单的。
文本文件的处理方式如下:
· 用DELIMITER属性指定一个分隔符。如果某个字段的数据包含分隔符本身,则必须将其括在引号中或括在某个其它字符中,你可以用TEXTQUALIFIER属性指定该字符。
· 缺省情况下,文本文件的第一行被解释为字段标题文本。你可以在COLUMNS属性中指定替代的标题文本。如果这样,你应确保为文本文件的每一列都指定了替代的标题文本。
· 当遇到重复的字段标题时,ColdFusion为重复的字段名添加一个下划线字符。例如,如果发现两个字段标题都是CustomerID,则第二个字段标题被更名为“CustomerID_”。
例子:根据一个文本文件创建查询
这个例子根据一个以逗号为分隔符的文本文件创建一个查询对象。该文本文件有六列数据,互相以逗号分隔,文件的第一行为:
OrderID,OrderNum,OrderDate,ShipDate,ShipName,ShipAddress
这个例子接受文本文件的第一行作为字段名:
<CFHTTP METHOD="Get"
URL="http://127.0.0.1/orders/june/orders.txt"
NAME="juneorders"
DELIMITER=","
TEXTQUALIFIER="""">
<CFOUTPUT QUERY="juneorders">
OrderID: #OrderID#<BR>
Order Number: #OrderNum#<BR>
Order Date: #OrderDate#<BR>
</CFOUTPUT>
你可用COLUMNS属性指定不同与上例的字段名:
<CFHTTP METHOD="Get"
URL="http://127.0.0.1/orders/june/orders.txt"
NAME="juneorders"
COLUMNS="ID, Number,Date"
DELIMITER=","
TEXTQUALIFIER="""">
<CFOUTPUT QUERY="juneorders">
Order ID: #ID#<BR>
Order Number: #Number#<BR>
Order Date: #Date#<BR>
</CFOUTPUT>