我想使用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();函数,在这种情况下,它显然是一个空白页面)。 Plz的帮助。我不知道如何保存网站内容。 Preg_match也不适用于curl_exec。 :/
答案 0 :(得分:0)
假设你实际上是通过curl抓取整个页面并存储在一个字符串中,你需要通过调用mysql_real_escape_string()来包装它,以逃避所有会搞乱SQL查询的事情,比如可能是引号和分号在页面源...
$str = mysql_real_escape_string($str);
祝你好运。你可能需要调整你的卷曲以获得你认为你得到的东西......
答案 1 :(得分: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注入,但我不确定你是否还需要在插入之前使用addslashes($ page)以防万一你遇到mysql失败。