我正在尝试使用cURL获取MIME Type
和正文作为内容。在谷歌和Stackoverflow上检查后,我得到了多个代码,使此操作成功完成。但有一些混乱,选择最可靠,速度和单一的HTTP请求代码。
1.从这些代码中选择哪一个最好。或者我们可以做得更好
1.我想要一个代码,使单一请求网站example.com
1.哪种代码适合从外部网站获取大量内容
代码1:
function file_get_contents_curl($url_curl) {
$agent = $_SERVER['HTTP_USER_AGENT'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 1); // include headers in response
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url_curl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
// Get the content type and content
$response_curl = curl_exec($ch);
$header_size = curl_getinfo($ch, CURLINFO_HEADER_SIZE);
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
$data_curl = substr($response_curl, $header_size);
// Set the content type header (MIME Type)
header('Content-Type:' . $content_type);
curl_close($ch);
return $data_curl;
}
//full page
$homepage = file_get_contents_curl("https://example.com");
echo $homepage;
代码2:
function file_get_contents_curl($url_curl){
$agent_curl = $_SERVER['HTTP_USER_AGENT'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url_curl);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_USERAGENT, $agent_curl);
$data_curl = curl_exec($ch);
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
curl_close($ch);
return compact('data_curl', 'content_type');
}
$data_webpage = file_get_contents_curl("https://example.com");
$homepage = $data_webpage['data_curl'];
$content_type = $data_webpage['content_type'];
header('Content-Type:'.$content_type);
echo $homepage;
代码3:
function file_get_contents_curl($url) {
$agent = $_SERVER['HTTP_USER_AGENT'];
$ch = curl_init();
curl_setopt($ch, CURLOPT_AUTOREFERER, TRUE);
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt($ch, CURLOPT_USERAGENT, $agent);
curl_setopt($ch, CURLOPT_VERBOSE, true);
// Get the content type
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_exec($ch);
$content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
// Get the content
curl_setopt($ch, CURLOPT_NOBODY, 0);
$data = curl_exec($ch);
curl_close($ch);
// Set the content type header
header('Content-Type:' . $content_type);
return $data;
}
$homepage = file_get_contents_curl("https://example.com");
echo $homepage;
1条答案
按热度按时间k0pti3hp1#
3个代码都使用cURL库来进行HTTP请求,看起来都能正常工作,但是每个代码都有不同的特性和方法,在不同的情况下可能会影响它们的可靠性和性能。
关于HTTP请求的数量,所有三个代码都向函数调用中指定的URL发出一个请求,因此,它们在这方面是等效的。
以下是每种代码的差异和潜在优势/劣势的简要概述:
代码1:
substr()
从响应中提取数据。代码2:
compact()
以数组形式返回响应正文和Content-Type。代码3:
CURLOPT_NOBODY
选项单独获取内容类型。在速度和可靠性方面,这三种代码的性能应该是相似的,因为它们使用相同的底层cURL库。但是,代码2和3可能比代码1稍有优势,因为它们显式提取Content-Type并单独存储,而不是依赖于解析响应头。