0

我想使用 PHP 和 cURL 访问 $i 网站并将其源代码添加到数据库中。

  function curl_grab_page($site,$proxy,$proxystatus,$post)
  {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);
    if ($proxystatus == 'on') {
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE);
        curl_setopt($ch, CURLOPT_HTTPPROXYTUNNEL, TRUE);
        curl_setopt($ch, CURLOPT_PROXY, $proxy);
    }
    curl_setopt($ch, CURLOPT_COOKIEFILE, "cookie.txt");
    curl_setopt($ch, CURLOPT_POST, 1);
    curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0");
    curl_setopt($ch, CURLOPT_URL, $site);
    ob_start();      
    return curl_exec ($ch); 
    ob_end_clean();
    curl_close ($ch);
}

所以我使用这个函数来获取在 $post 中发送的网站。如您所见,它返回 curl_exec($ch)。现在我想将 curl_exec($ch) 放入数据库。我该怎么做?

$sql = "INSERT INTO 抓取的 ( website_source) VALUES ('$str')";

这不起作用(返回 die(); 函数,在这种情况下它显然是一个空白页)。请帮忙。我看不出还有什么办法可以保存网站上的内容。Preg_match 也不适用于 curl_exec。:/

4

2 回答 2

0

假设您实际上是通过 curl 抓取整个页面并将其存储在一个字符串中,您需要通过调用 mysql_real_escape_string() 将其包装起来,以转义所有可能会搞砸 SQL 查询的内容,例如页面中可能存在的引号和分号资源...

$str = mysql_real_escape_string($str); 

祝你好运。你可能需要调整你的卷曲以获得你认为你得到的东西......

于 2012-07-16T04:08:02.390 回答
0

在您的 curl 响应中,将响应设置为变量,以便您进行故障排除:

$output = curl_exec($ch);
$info = curl_getinfo($ch);

然后您可以查看 $output 和 $info 并确定返回的内容。

至于插入数据库,您将在函数中返回您的 $output,调用代码将连接到数据库并执行插入查询。您最有可能希望 website_source 列的字段类型为 TEXT。

// get connection to database

// iterate through list of websites to be crawled

// crawl site (call your function)
$page = curl_grab_page(...);

// check if content valid
if...blah

// insert into database
$query = sprintf("INSERT INTO crawled ( website_source ) VALUES '%s'",
        mysql_real_escape_string($page));

mysql_query($query);

您可能希望用 try catch 包围并进行一些错误处理。msyql_real_escape_string 可以防止 sql 注入,但我不确定在插入之前是否还需要使用 addlashes($page) 以防 mysql 失败。

于 2012-07-16T04:20:18.243 回答