我想从另一个网站动态检索html内容,我有公司的许可。
请不要将我指向 JSONP,因为我无法编辑站点 A,只能编辑站点 B
由于跨域安全问题,您将无法在客户端执行此操作,除非您对iframe
.
使用 PHP,您可以使用多种“抓取”内容的方法。您使用的方法取决于您是否需要在请求中使用 cookie(即数据在登录后)。
无论哪种方式,要从客户端开始,您将向您自己的服务器发出标准 AJAX 请求:
$.ajax({
type: "POST",
url: "localProxy.php",
data: {url: "maybe_send_your_url_here.php?product_id=1"}
}).done(function( html ) {
// do something with your HTML!
});
如果您需要设置 cookie(如果远程站点需要登录,则需要它们),您将使用 cURL。使用发布数据登录和接受 cookie 的完整机制有点超出此答案的范围,但您的请求看起来像这样:
$ch = curl_init();
curl_setopt ($ch, CURLOPT_URL, 'http://thirdpartydomain.internet/login_url.php');
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt ($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6");
curl_setopt ($ch, CURLOPT_TIMEOUT, 60);
curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 0);
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookie.jar');
curl_setopt ($ch, CURLOPT_POSTFIELDS, 'email='.$username.'&password='.$password);
curl_setopt ($ch, CURLOPT_POST, 1);
$result = curl_exec ($ch);
curl_close($ch);
此时,您可以检查$result
变量并确保登录有效。如果是这样,您将使用 cURL 发出另一个请求以获取页面内容。第二个请求不会包含所有帖子垃圾,您将使用您尝试获取的 URL。您最终会得到一个充满 HTML 的大字符串。
如果您只需要该页面的一部分内容,您可以使用下面的方法将字符串加载到 DomDocument 中,使用该loadHTML
方法代替loadHTMLFile
(见下文)
说到DomDocument,如果你不需要cookies,那么你可以直接使用DomDocument来获取页面,跳过cURL:
$doc = new DOMDocument('1.0', 'UTF-8');
// load the string into the DOM (this is your page's HTML), see below for more info
$doc->loadHTMLFile ('http://third_party_url_here.php?query=string');
// since we are working with HTML fragments here, remove <!DOCTYPE
$doc->removeChild($doc->firstChild);
// remove <html></html> and any junk
$body = $doc->getElementsByTagName('body');
$doc->replaceChild($body->item(0), $doc->firstChild);
// now, you can get any portion of the html (target a div, for example) using familiar DOM methods
// echo the HTML (or desired portion thereof)
die($doc->saveHTML());
文档
iframe
MDN 上的HTML - https://developer.mozilla.org/en/HTML/Element/iframejQuery.ajax()
- http://api.jquery.com/jQuery.ajax/cURL
- http://php.net/manual/en/book.curl.phpCurl::set_opt
(有关使用 cookie 的信息)- http://www.php.net/manual/en/function.curl-setopt.phpDomDocument
- http://php.net/manual/en/class.domdocument.phpDomDocument::loadHTMLFile
- http://www.php.net/manual/en/domdocument.loadhtmlfile.phpDomDocument::loadHTML
- http://www.php.net/manual/en/domdocument.loadhtml.php