如何使用cURL获取文本
我想从另一个URL使用cURL获取/获取文本。我从中获取文本的位置位于具有动态(非静态)数据的空白HTML文档中,因此没有要过滤的HTML标记。这是我到目前为止有:如何使用cURL获取文本
$c = curl_init('http://url.com/dataid='.$_POST['username']);
curl_setopt(CURLOPT_RETURNTRANSFER, true);
curl_setopt(CURLOPT_FRESH_CONNECT, true);
$html = curl_exec($c);
if (curl_error($c))
die(curl_error($c));
// Get the status code
$status = curl_getinfo($c, CURLINFO_HTTP_CODE);
curl_close($c);
这工作完全,但在动态HTML文档的末尾有未要求的文本,“#endofscript”(不带引号)。这会被抓取/抓取,那么可以做些什么来避免抓取?我试过看“strpos”等,但我不确定如何将它与cURL整合。
全部/任何帮助将/将不胜感激。 :)
编辑:我目前使用的代码:
<?php
$homepage = file_get_contents('http://*.com/');
$result = substr("$homepage", 0, -12);
echo $result;
?>
为什么不使用简单
<?php
$homepage = file_get_contents('http://www.example.com/');
echo $homepage;
?>
如果代码只在您的服务器上运行,并且您的服务器支持'file_get_contents',这是一个很好的解决方案。但是,如果要分发代码(例如,在WordPress插件中),则不能依赖允许使用'file_get_contents'的服务器设置。至少,在这种情况下,应该有一个“卷曲”回退。 – kingjeffrey 2010-06-25 18:16:50
谢谢你的回答和评论,我感谢他们。不,代码将不会分发,并将保留在一台服务器上。现在我已经将该代码应用到网页上,而不是使用cURL,它只是带来了相同的结果。我需要找到一种方式,使文本“#endofscript”不会显示。亲切的问候。 :) – AUllah1 2010-06-25 18:30:50
这只是最简单的方式来处理)))欢迎您))) – GOsha 2010-06-25 20:34:10
谢谢大家的帮助,我不能说我多么感激他们!使用GOsha给出的脚本,我设法修改它,以便删除最终文本。使用的代码如下:
<?php
$homepage = file_get_contents('http://url.com/dataid='.$_POST['username']);
$rest = substr("$homepage", 0, -12);
echo $rest;
?>
现在已经得到解答。谢谢大家,我非常感谢你的回复。 :)
你可以使用preg_replace()删除开始以 “#” 例如所有行:
$res = preg_replace('/^#.*$[\\r\\n]*/m','',$dat);
或只是
'/#endofscript$/'
到的thingie末相匹配。
substr/str_replace /其他一些字符串函数也可以。
一些示例代码如何实现SUBSTR/preg_replace函数方法:
<pre><?php
$dat = 'Lorem ipsum dolor sit amet,
consectetur adipisicing
elit #endofscript';
// either
if (substr($dat,-12) == '#endofscript')
$res = substr($dat,0,-12);
var_dump($res);
// or
$res = preg_replace('/#endofscript$/','',$dat);
var_dump($res);
?></pre>
感谢您的答复Kuchen,我想使用这种方法,因为我注意到substr不仅删除#endofscript文本,但所有最后几个字母被抓住(所以,如果#endofscript没有显示,它仍然会删除文本)。我将如何在脚本中应用你的方法?特别是当我的内容被抓取/抓取时。此外,我抓取/抓取的内容都是一行,因此第一个选项不能使用。我再一次感谢你的回应。 :) – AUllah1 2010-06-25 22:22:04
你可以检查如果(substr($ homepage,-12)=='#endofscript')之前使用substr实际删除它,可能会比正则表达式更快。除此之外,只需使用带有第二个表达式的preg_replace行,其中$ dat是您的$主页。 :-) – Kuchen 2010-06-26 02:32:56
嘿Kuchen,再次感谢您的回应。我喜欢在使用substr功能之前检查的想法,但是如何在脚本中添加该功能?我试过但失败了,对不起,我一直在学习一些东西。并且使用preg_replace,我该如何使用它呢?在脚本中添加它之后,我添加了“echo $ res;”它似乎没有做到这一点,它仍然显示文本“#endofscript”。谢谢您的回复。 :) – AUllah1 2010-06-26 16:25:46
既然你说这个不好文本可能追加到输出,你可以使用类似这样的代码(敷在一个更容易编码体验的功能):
<?php
define("bad_text", "#endofscript");
$feed_text = "here is some text#endofscript";
$bExist = false;
if(strlen($feed_text) >= constant("bad_text"))
{
$end_of_text = substr($feed_text, strlen($feed_text) - strlen(constant("bad_text")));
$bExist = strcmp($end_of_text, constant("bad_text")) == 0;
}
if($bExist)
$final_text = substr($feed_text, 0, strlen($feed_text) - strlen(constant("bad_text")));
else
$final_text = $feed_text;
echo $final_text;
?>
嗨波尼,我非常感谢你的回复,并认为你的编码非常迷人。但是,我使用的内容是抓取/提取的,因此我不认为这些代码适用于它,因为我试图将抓取的内容应用到它上面。你认为有这方面的工作,或者我只是做错了吗?感谢您的回复和时间。 :) – AUllah1 2010-06-25 22:25:44
感谢您的好评! “抓取/抓取”是什么意思?而且,你说Feed是文本,还是二进制文件? ..只是你知道 - 每次在上面的代码中,我们称之为strlen(),我们浪费CPU周期 - 你最好调用它一次,并把它放在“$ feed_len”中...只是一个快速优化。 – Poni 2010-06-25 23:17:04
谢谢你的回应,很感激。 :)当我说“grabbed/fetched”我的意思是文本已被转移到我的网站使用“file_get_contents”(PHP函数),并且文本不是手动输入。尽管文本仍然是文本而不是二进制文件。在使用“file_get_contents”获取文本后,您的php脚本似乎不会删除所提取的“#endofscript”文本。再次感谢您的努力和您的回复! :) – AUllah1 2010-06-26 16:30:35
你确定问题存在于cURL中吗?对我来说,它看起来像“#endofscript”是脚本的输出结果,用于生成/发送您正在提取的文本。 – Poni 2010-06-25 18:17:02
尝试读取一些非动态文本/页面,如果写入了“#endofscript”文本,那么它是cURL的谁造成它,否则你应该检查另一端(服务器的脚本)。 – Poni 2010-06-25 18:18:31
你好, 是的,你是对的。文本“#endofscript”位于动态HTML文档中,与cURL脚本无关。 cURL脚本只是选择“#endofscript”文本并将其显示到我的网页上。我问是不是为了抢那个? 亲切的问候,我感谢您的回应。:) – AUllah1 2010-06-25 18:22:56