【问题标题】:Get html cross site, display it and get an element value获取html跨站,显示并获取元素值
【发布时间】:2010-12-10 16:20:20
【问题描述】:

我需要从一个 aspx 站点获取完整的输出。当用户离开时,我会将某些特定元素中的内容保存在 cookie 中。问题是 aspx 位于我无权访问的域上。我希望输出的行为与 iframe 中的一样,因此链接需要是可点击的,但它不会离开我的页面。

我想到了带有 PHP 代理的 AJAX 或我可以在其中修改内容的 iframe。 这可能吗? 如果可能并且它涉及服务器端代码,我想知道是否有任何免费的网络主机支持完整的代码(例如几乎每个免费的网络主机都为 PHP 启用了安全模式)。

编辑:我想显示此页面:School scheme。 URL 不会改变,它只是向服务器发送请求(通过 JavaScript 思考)。当用户离开时,我会看到选择框 id="TypeDropDownList" 中的内容以及选择框 id="ScheduleIDDropDownList" 中的内容。

当用户返回我的页面时,我将通过 URL 将这些值打印到页面,例如 "http://www.novasoftware.se/webviewer/(S(lv1isca2txx1bu45c3kvic45))/design1.aspx?schoolid=27500&code=82820&type=" + type + "&id=" + id + "

在我在这里发布之前,我在 000webhost 上尝试了几个 php 代理脚本。 例如这个:

<?php
ob_start();

function logf($message) {
  $fd = fopen('proxy.log', "a");
  fwrite($fd, $message . "\n");
  fclose($fd);
}

?>
<?
$url = $_REQUEST['url'];
logf($url);
$curl_handle = curl_init($url);
curl_setopt($curl_handle, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($curl_handle, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($curl_handle, CURLOPT_USERAGENT, "Owen's AJAX Proxy");

$content = curl_exec($curl_handle);
$content_type = curl_getinfo($curl_handle, CURLINFO_CONTENT_TYPE);
curl_close($curl_handle);
header("Content-Type: $content_type");
echo $content;
ob_flush();
?>

但它返回警告:curl_setopt():提供的参数不是第 16 行 /home/a5379897/public_html/ajax-proxy.php 中的有效 cURL 句柄资源

我试图就此联系他们,因为他们说他们启用了 cURL,但他们还没有回复。

我认为当用户第一次访问页面时只显示两个选择框是可能的。选择选项后,它将通过传递“http://www.novasoftware.se/webviewer/(S(lv1isca2txx1bu45c3kvic45))/design1.aspx?schoolid=27500&code=82820&type=" + type + " 使 iframe 显示正确的页面&id=" + id + " 到 src 属性。 问题是我需要以某种方式检索选择框,我也会遇到同样的问题。

【问题讨论】:

  • 一定有更简单的方法。你的最终目标是什么?你到底想做什么?
  • 我同意斯蒂芬的观点......我以前做过类似的事情,但并不漂亮。

标签: php javascript ajax cross-domain


【解决方案1】:

您需要使用 PHP,因为 Javascript 不允许跨域请求。您的 PHP 代码会从字面上抓取客户想要的页面,对其进行处理(使用原始 href 链接到的页面的 get 变量将链接的 href 更改为您的页面)。当他们点击链接时,他们将被发送到他们现在所在的同一页面,但该页面将抓取新页面并返回该页面(也处理该页面)等等。

000webhost 是一个不错的免费虚拟主机,它允许您执行 PHP 的大部分功能,并且不会在您的网站上放置广告。

【讨论】:

  • 我在这里发布之前尝试过 000webhost,我尝试使用 cURL,但不幸的是它没有用。他们也开启了安全模式,我也不能在那里使用 fopen。
【解决方案2】:

要将整个 aspx 输出作为字符串进行操作,可以使用 file_get_contents(http://yoursite.com/yourpage.aspx);

为获得最佳效果,请通过 http 打开一个流作为上下文。

<?php
// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);

// Open the file using the HTTP headers set above
$file = file_get_contents('http://www.example.com/', false, $context);
?>

【讨论】:

  • 谢谢,我稍后会尝试并告诉你我是否成功了。首先,我需要找到一个支持它的免费网络主机。如果我找到一个,我当然会写下它是哪一个。
  • 我在 WampServer 中尝试了您的脚本,但是当我尝试查看 aspx 页面时出现此错误:未找到请求的 URL /MZDesign1.aspx 在此服务器上未找到。
  • 我在 file_get_contents 中输入了novasoftware.se/webviewer/(S(jaz2h3z1eziugm45upgm4y3p))/…{7294F285-A5CB-47D6-B268-E950CA205560}
  • 我想我需要更改所有网址,看看之后会发生什么
【解决方案3】:

感谢 greg 我可以创建这个获取页面的脚本。

<html>
<head>
</head>
<body>
<?php
// Create a stream
$opts = array(
  'http'=>array(
    'method'=>"GET",
    'header'=>"Accept-language: en\r\n" .
              "Cookie: foo=bar\r\n"
  )
);

$context = stream_context_create($opts);
$host = 'http://www.novasoftware.se/webviewer/(S(bkjwdqntqzife4251x4sdx45))/';
$url = '/design1.aspx?schoolid=27500&code=82820&type=3&id={7294F285-A5CB-47D6-B268-E950CA205560}';
$changetothis='src="'.$host;
// Open the file using the HTTP headers set above
$file = file_get_contents($host.$url, false, $context);
$changed = str_replace('src="', $changetothis,$file);
echo $changed;

?>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-05-07
    • 2020-08-22
    • 1970-01-01
    • 2020-03-11
    • 1970-01-01
    • 2023-02-07
    • 1970-01-01
    相关资源
    最近更新 更多