如何使用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; 

?> 
+1

你确定问题存在于cURL中吗?对我来说,它看起来像“#endofscript”是脚本的输出结果,用于生成/发送您正在提取的文本。 – Poni 2010-06-25 18:17:02

+0

尝试读取一些非动态文本/页面,如果写入了“#endofscript”文本,那么它是cURL的谁造成它,否则你应该检查另一端(服务器的脚本)。 – Poni 2010-06-25 18:18:31

+0

你好, 是的,你是对的。文本“#endofscript”位于动态HTML文档中,与cURL脚本无关。 cURL脚本只是选择“#endofscript”文本并将其显示到我的网页上。我问是不是为了抢那个? 亲切的问候,我感谢您的回应。:) – AUllah1 2010-06-25 18:22:56

为什么不使用简单

<?php 
$homepage = file_get_contents('http://www.example.com/'); 
echo $homepage; 
?> 

http://php.net/manual/en/function.file-get-contents.php

+0

如果代码只在您的服务器上运行,并且您的服务器支持'file_get_contents',这是一个很好的解决方案。但是,如果要分发代码(例如,在WordPress插件中),则不能依赖允许使用'file_get_contents'的服务器设置。至少,在这种情况下,应该有一个“卷曲”回退。 – kingjeffrey 2010-06-25 18:16:50

+0

谢谢你的回答和评论,我感谢他们。不,代码将不会分发,并将保留在一台服务器上。现在我已经将该代码应用到网页上,而不是使用cURL,它只是带来了相同的结果。我需要找到一种方式,使文本“#endofscript”不会显示。亲切的问候。 :) – AUllah1 2010-06-25 18:30:50

+0

这只是最简单的方式来处理)))欢迎您))) – 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> 
+0

感谢您的答复Kuchen,我想使用这种方法,因为我注意到substr不仅删除#endofscript文本,但所有最后几个字母被抓住(所以,如果#endofscript没有显示,它仍然会删除文本)。我将如何在脚本中应用你的方法?特别是当我的内容被抓取/抓取时。此外,我抓取/抓取的内容都是一行,因此第一个选项不能使用。我再一次感谢你的回应。 :) – AUllah1 2010-06-25 22:22:04

+0

你可以检查如果(substr($ homepage,-12)=='#endofscript')之前使用substr实际删除它,可能会比正则表达式更快。除此之外,只需使用带有第二个表达式的preg_replace行,其中$ dat是您的$主页。 :-) – Kuchen 2010-06-26 02:32:56

+0

嘿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; 
?> 
+0

嗨波尼,我非常感谢你的回复,并认为你的编码非常迷人。但是,我使用的内容是抓取/提取的,因此我不认为这些代码适用于它,因为我试图将抓取的内容应用到它上面。你认为有这方面的工作,或者我只是做错了吗?感谢您的回复和时间。 :) – AUllah1 2010-06-25 22:25:44

+0

感谢您的好评! “抓取/抓取”是什么意思?而且,你说Feed是文本,还是二进制文件? ..只是你知道 - 每次在上面的代码中,我们称之为strlen(),我们浪费CPU周期 - 你最好调用它一次,并把它放在“$ feed_len”中...只是一个快速优化。 – Poni 2010-06-25 23:17:04

+0

谢谢你的回应,很感激。 :)当我说“grabbed/fetched”我的意思是文本已被转移到我的网站使用“file_get_contents”(PHP函数),并且文本不是手动输入。尽管文本仍然是文本而不是二进制文件。在使用“file_get_contents”获取文本后,您的php脚本似乎不会删除所提取的“#endofscript”文本。再次感谢您的努力和您的回复! :) – AUllah1 2010-06-26 16:30:35