能否用PHP写一个在服务器端访问其他网站的asp文件,返回asp执行后的结果? 感谢关注!我当然知道AJAX不能跨域。所以我用服务器去访问而不是客户端。完全使用ASP的代码我已经完成了,可以跨域。只是希望能够用PHP实现同样的功能。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 我贴出我现在用ASP写的全部代码。核心代码只有4行。/***开始***/<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8" /><title>Check Validate Code By WFSVI service</title></head><body><%Function CheckAJAX(praURL)Dim myXMLHttpObjSet myXMLHttpObj = Server.CreateObject("Msxml2.XMLHTTP.5.0")myXMLHttpObj.open "GET",praURL,falsemyXMLHttpObj.sendCheckVCByAJAX = myXMLHttpObj.responseBodySet myXMLHttpObj = NothingEnd functionIf Request.Form("MyCode") <>"" ThenSession("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><%If Session("Result") = "1" ThenResponse.Write("<p>是1</p>")ElseResponse.Write("<p>不是1</p>")End If%></body></html>/***结束***/其中,假设www.AAAAA.com是我的网站,我用ASP写了一个网页 Check.asp,需要带入2个参数:ID和Code。这个网页提供了一个服务,咱们姑且不需要知道是什么服务,这样会使问题复杂化。只需要知道,通过带入的2个参数经过处理,最终Check.asp返回的结果只是字符串“1”或“0”。“1”代表成功。另外一个网站,假设是www.BBBBB.com,是别人的网站。这个网站可能是asp.net,也可能是PHP或JSP。这个网站的访问者打开一个动态网页,输入表单中名称是MyID和MyCode的文本框,提交到他的服务器(也就是www.BBBBB.com。会有人问为什么吗?请再看看上两行字。)。提交到www.BBBBB.com服务器的动态网页在他自己的服务器端访问我的 www.AAAAA.com/Check.asp,带入三个参数:第一个是时间戳,单位是毫秒,保证每次访问都不重复,不使用缓存。第二个和第三个是表单中名称是MyID和MyCode文本框的内容。在www.BBBBB.com访问了我的ASP之后,我需要它能将Check.asp返回的结果存入它自己的Seesion变量中。这样它就可以知道自己的每个访问者执行了我的服务之后的结果。这是我琢磨出来的Seesion跨域共享的方法。在两个都是ASP写的网站中已经可以成功“共享”Session。但是我需要其他的动态语言编写的www.BBBBB.com也能使用这个方法。所以来此请教。(我在其他版也发了同样的帖子。有人抱怨50分太少。这是我给最多分的一次了,不过我可以加分) JSP版有一位热心的朋友帮我解决了用JSP访问ASP的代码。分数可能不多,我送给他80分。是不是PHP不能实现?难道PHP还是这么落后吗? 本帖也加分加到80。唉,可能加到800也没用,PHP搞不好没有这个能力访问其他网站返回结果。 php为什么不可以?连这么简单的问题都不行的话,还有这么多人会用php吗? 我是楼主。我不知道PHP是否easy,因为我不懂PHP。5年前倒是学过,后来都忘光了。所以来PHP版请教。我可不是来踢馆的。 你的需求我地没仔细看,抓取网页内容方法不少。1.file_get_contents2.fopen3.fsockopen以下是fsockopen简单示例.---------------------------------------------------------------function checkAjax($url){ $urls = parse_url($url); /*values assign*/ $host = $urls['host']; $path = $urls['path']; $port = $urls['port'] ? $urls['port'] : 80; $qstr = $urls['query']; $fp = fsockopen($host,$port,$errno,$errstr,30); if(!$fp) { echo $errno.'-->'.$errstr.'<br>'; } else { $header.= "GET ".$path."?".$qstr." HTTP/1.1\r\n"; $header.= "Host: ".$host."\r\n"; $header.= "Connection: Close\r\n\r\n"; fwrite($fp,$header); while(!feof($fp)) { $rs .= fgets($fp); } } return $rs;}echo checkAjax('http://community.csdn.net/Expert/TopicView3.asp?id=5659671'); 写个最短的抓页面的echo file_get_contents('http://.............'); 看到PHP就如看到美元$$$$$呵呵~能想出这种写发的人肯定缺钱"GET ".$path."?" 捡美元路径在哪里?"Host: ".$host."?" 捡美元从哪个门进入return $ 美元已经捡到返回:P 各位看看其他版中我的同样问题吧。ASP.net和JSP的我确认了代码之后马上揭帖。ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922哪位能够帮忙给出完整的代码?我不熟悉PHP。另外,请勿灌水! Socket吧,我觉得这个应该可以帮助你搞定这个问题! 能给出完整的代码吗?你的这个回复相当于告诉我用电脑就可以。因为我不懂PHP。 Mydscn() 你错了"GET ".$path."?" 投资美元来买路"Host: ".$host."?" 投资美元来买房子return $ 你一共赚了多少美元=============================================我本机不能运行asp,所以下面的程序是用经验来写的(没有测试)<?$url = "http://xxx.xxx.xxx/xxx.asp?x=x&x=x&x=x";$arr= file($url);foreach($arr as $v){ echo $v;}?>这是最最最简单的php读取了<% Session("Result") = CheckAJAX ....%>你的AJAX是服务端代码处理(非js)我认为这样就可以了php 什么页面读不出来,就算是asp.net 的 __doPostBack 自动回送也能读fsockopen,Socket4,Socket5get方式,post方式 防浏览器工作而以 跨域时 要用 RefererGET $Url HTTP/1.1\r\nUser-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)\r\nReferer: $Referer\r\nAccept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\nAccept-Language: en-us, en;q=0.50\r\nAccept-Encoding: gzip, deflate, compress;q=0.9\r\nConnection: Close\r\n\r\n如果不懂就用 Snoopy.class.php 类(不过此类不能读asp.net的__doPostBack 自动回送) 很抱歉,以上虽然有热心的朋友贴出了很多代码,但这样的代码,我不能给分。因为我不懂PHP。这些代码无疑等于“用电脑就可以”之类的答案。能否贴出像ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922一样的代码?请写出详细的注释。你也不需要懂asp,只要用php访问一个网址,带入参数,得到返回的内容即可。 80分太少吗?再加20分。我不懂PHP,但是熟悉PHP的通过上面回贴的提示一定可以弄出来。我需要像ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922一样的代码。PHP语句,每句都要注释。 我知道PHP肯定可以做到,所以又加了20分。我还知道几乎所有的动态网页语言都可以做到。 <?php$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);if (!$fp) { echo "$errstr ($errno)<br />\n";} else { $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out); while (!feof($fp)) { echo fgets($fp, 128); } fclose($fp);}?> 这个是php手册中的例子, $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n";其中这部分,你可以用嗅探器等工具 得到 传送的数据,然后模拟出数据 以上的数据就相当于模拟的数据, 你可以这样,1. 下载一个嗅探器2. 建一个php页面 aa.php 里面写上 <?phpecho "aaa";?>然后打开嗅探器访问 aa.php这时候嗅探器里面数据就出来了,里面有进来的或者出去的数据,当然,你这时候想测试,所以你取第一条与GET有关的数据, 把它组成字符串如 $out = "GET / HTTP/1.1\r\n"; $out .= "Host: www.example.com\r\n"; $out .= "Connection: Close\r\n\r\n";然后用上面我所给出的那种方法访问就可以了,如果不出错,里面会包含一些头方面的数据,和aa.php里面输出的 aaa LS很多人都写出来了,很简单我不清楚ASP中的Timer()函数的具体情况<html><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><?phpif (!empty($_POST["MyCode"])){ $d = getdate(); $timer = round(microtime(1)-mktime(0,0,0,$d["mon"],$d["mday"],$d["year"]),2); $_SESSION["Result"] = file_get_contents("http://www.AAAAA.com/Check.asp?TimeStamp=$timer&ID=".$_POST["MyID"].'$Code='.$_POST["MyCode"]);}?><p>这是HTML代码。URL返回结果是:<?php echo $_SESSION["Result"]; ?></p><?phpif ($_SESSION["Result"]==1) echo "<p>是1</p>";else echo "<p>不是1</p>";?><body></body></html> file_get_contents("http://www.AAAAA.com/Check.asp?TimeStamp=$timer&ID=".$_POST["MyID"].'$Code='.$_POST["MyCode"]);这一行错了个符号:'$Code=' 应为 '&Code=' 完全可以。$result = file_get_contents("http://www.xxx.com");$result这个字符串就是你那个网页的html源代码。至于1或0出现在什么位置,用正则去抓取下就可以了。 新手请教php文件上传解压的问题 动态网页表单内容提取后的undifined index的问题 怎样才能转换为正常的中文? php 的 STDOUT , php://stdout , php://output 在cgi上的区别? 程序外包,急!最好在上海地区 Windows 2000系统上有运行PHP权限的Apache的虚拟主机安全问题。 请问如何得到Zend Encode,及怎样安装? 这是什么破论坛?打开个问题就要弹出个窗口。 刚刚做了一个类似VBB的转换代码。高分请大家帮忙完善! 慕课网PHP商城 教程实际不显示验证码问题 这条SQL语句应该怎么写? apache 怎么url重写
/***开始***/
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Check Validate Code By WFSVI service</title>
</head>
<body><%
Function CheckAJAX(praURL)
Dim myXMLHttpObj
Set myXMLHttpObj = Server.CreateObject("Msxml2.XMLHTTP.5.0")myXMLHttpObj.open "GET",praURL,false
myXMLHttpObj.sendCheckVCByAJAX = myXMLHttpObj.responseBodySet myXMLHttpObj = Nothing
End functionIf Request.Form("MyCode") <>"" Then
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><%
If Session("Result") = "1" Then
Response.Write("<p>是1</p>")
Else
Response.Write("<p>不是1</p>")
End If
%></body>
</html>
/***结束***/其中,假设www.AAAAA.com是我的网站,我用ASP写了一个网页 Check.asp,需要带入2个参数:ID和Code。这个网页提供了一个服务,咱们姑且不需要知道是什么服务,这样会使问题复杂化。只需要知道,通过带入的2个参数经过处理,最终Check.asp返回的结果只是字符串“1”或“0”。“1”代表成功。另外一个网站,假设是www.BBBBB.com,是别人的网站。这个网站可能是asp.net,也可能是PHP或JSP。
这个网站的访问者打开一个动态网页,输入表单中名称是MyID和MyCode的文本框,提交到他的服务器(也就是www.BBBBB.com。会有人问为什么吗?请再看看上两行字。)。提交到www.BBBBB.com服务器的动态网页在他自己的服务器端访问我的 www.AAAAA.com/Check.asp,带入三个参数:第一个是时间戳,单位是毫秒,保证每次访问都不重复,不使用缓存。第二个和第三个是表单中名称是MyID和MyCode文本框的内容。在www.BBBBB.com访问了我的ASP之后,我需要它能将Check.asp返回的结果存入它自己的Seesion变量中。这样它就可以知道自己的每个访问者执行了我的服务之后的结果。这是我琢磨出来的Seesion跨域共享的方法。在两个都是ASP写的网站中已经可以成功“共享”Session。
但是我需要其他的动态语言编写的www.BBBBB.com也能使用这个方法。所以来此请教。(我在其他版也发了同样的帖子。有人抱怨50分太少。这是我给最多分的一次了,不过我可以加分)
分数可能不多,我送给他80分。
是不是PHP不能实现?
难道PHP还是这么落后吗?
唉,可能加到800也没用,PHP搞不好没有这个能力访问其他网站返回结果。
我不知道PHP是否easy,因为我不懂PHP。5年前倒是学过,后来都忘光了。
所以来PHP版请教。我可不是来踢馆的。
1.file_get_contents
2.fopen
3.fsockopen
以下是fsockopen简单示例.
---------------------------------------------------------------
function checkAjax($url)
{
$urls = parse_url($url);
/*values assign*/
$host = $urls['host'];
$path = $urls['path'];
$port = $urls['port'] ? $urls['port'] : 80;
$qstr = $urls['query'];
$fp = fsockopen($host,$port,$errno,$errstr,30);
if(!$fp)
{
echo $errno.'-->'.$errstr.'<br>';
}
else
{
$header.= "GET ".$path."?".$qstr." HTTP/1.1\r\n";
$header.= "Host: ".$host."\r\n";
$header.= "Connection: Close\r\n\r\n";
fwrite($fp,$header);
while(!feof($fp))
{
$rs .= fgets($fp);
}
}
return $rs;
}
echo checkAjax('http://community.csdn.net/Expert/TopicView3.asp?id=5659671');
echo file_get_contents('http://.............');
看到PHP就如看到美元$$$$$呵呵~能想出这种写发的人肯定缺钱"GET ".$path."?" 捡美元路径在哪里?
"Host: ".$host."?" 捡美元从哪个门进入
return $ 美元已经捡到返回
:P
ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758
JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922哪位能够帮忙给出完整的代码?我不熟悉PHP。另外,请勿灌水!
你的这个回复相当于告诉我用电脑就可以。因为我不懂PHP。
"GET ".$path."?" 投资美元来买路
"Host: ".$host."?" 投资美元来买房子
return $ 你一共赚了多少美元
=============================================
我本机不能运行asp,所以下面的程序是用经验来写的(没有测试)
<?
$url = "http://xxx.xxx.xxx/xxx.asp?x=x&x=x&x=x";
$arr= file($url);
foreach($arr as $v){
echo $v;
}
?>
这是最最最简单的php读取了
<% Session("Result") = CheckAJAX ....%>
你的AJAX是服务端代码处理(非js)我认为这样就可以了
php 什么页面读不出来,就算是asp.net 的 __doPostBack 自动回送也能读
fsockopen,Socket4,Socket5
get方式,post方式
防浏览器工作而以
GET $Url HTTP/1.1\r\n
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1)\r\n
Referer: $Referer\r\n
Accept: text/xml,application/xml,application/xhtml+xml,
text/html;q=0.9,text/plain;q=0.8,video/x-mng,image/png,
image/jpeg,image/gif;q=0.2,text/css,*/*;q=0.1\r\n
Accept-Language: en-us, en;q=0.50\r\n
Accept-Encoding: gzip, deflate, compress;q=0.9\r\n
Connection: Close\r\n\r\n如果不懂就用 Snoopy.class.php 类(不过此类不能读asp.net的__doPostBack 自动回送)
因为我不懂PHP。这些代码无疑等于“用电脑就可以”之类的答案。能否贴出像
ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758
JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922
一样的代码?
请写出详细的注释。你也不需要懂asp,只要用php访问一个网址,带入参数,得到返回的内容即可。
再加20分。我不懂PHP,但是熟悉PHP的通过上面回贴的提示一定可以弄出来。
我需要像
ASP.net: http://community.csdn.net/Expert/topic/5659/5659735.xml?temp=.2207758
JSP: http://community.csdn.net/Expert/topic/5659/5659661.xml?temp=.8381922
一样的代码。PHP语句,每句都要注释。
我还知道几乎所有的动态网页语言都可以做到。
$fp = fsockopen("www.example.com", 80, $errno, $errstr, 30);
if (!$fp) {
echo "$errstr ($errno)<br />\n";
} else {
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n"; fwrite($fp, $out);
while (!feof($fp)) {
echo fgets($fp, 128);
}
fclose($fp);
}
?> 这个是php手册中的例子,
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";其中这部分,你可以用嗅探器等工具 得到 传送的数据,然后模拟出数据 以上的数据就相当于模拟的数据,
1. 下载一个嗅探器
2. 建一个php页面 aa.php 里面写上
<?php
echo "aaa";
?>然后打开嗅探器访问 aa.php这时候嗅探器里面数据就出来了,里面有进来的或者出去的数据,当然,你这时候想测试,所以你取第一条与GET有关的数据, 把它组成字符串如
$out = "GET / HTTP/1.1\r\n";
$out .= "Host: www.example.com\r\n";
$out .= "Connection: Close\r\n\r\n";然后用上面我所给出的那种方法访问就可以了,如果不出错,里面会包含一些头方面的数据,和aa.php里面输出的 aaa
我不清楚ASP中的Timer()函数的具体情况<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>无标题文档</title>
</head><?phpif (!empty($_POST["MyCode"]))
{
$d = getdate();
$timer = round(microtime(1)-mktime(0,0,0,$d["mon"],$d["mday"],$d["year"]),2);
$_SESSION["Result"] = file_get_contents("http://www.AAAAA.com/Check.asp?TimeStamp=$timer&ID=".$_POST["MyID"].'$Code='.$_POST["MyCode"]);
}
?>
<p>这是HTML代码。URL返回结果是:<?php echo $_SESSION["Result"]; ?></p>
<?php
if ($_SESSION["Result"]==1)
echo "<p>是1</p>";
else
echo "<p>不是1</p>";
?><body>
</body>
</html>
$result = file_get_contents("http://www.xxx.com");
$result这个字符串就是你那个网页的html源代码。至于1或0出现在什么位置,用正则去抓取下就可以了。