用file_get_contents 以get方式获取内容
$url = 'www.baidu.com';
$html = file_get_contents($url);
echo $html
用file_get_contents函数,以post方式获取URL
header("Content-type:text/html;charset=utf-8");
$aContext = array(
'http' => array(
'proxy' => 'tcp://10.167.32.133:8080', //这里设置你要使用的代理ip及端口号
'request_fulluri' => true,
),
);
$cxContext = stream_context_create($aContext);
$url = "http://www.baidu.com";
$sFile = file_get_contents($url , False, $cxContext);
echo $sFile;
使用curl库
使用curl库之前,查看一下php.ini 是否已经打开了curl 扩展
//初始化一个会话
$ch=curl_init();
//为curl会话设置参数
curl_setopt($ch, CURLOPT_URL, $url);
//如果成功只返回结果,不自动输出任何内容
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
//如果想把一个头包含在输出中,就设置为1
curl_setopt($ch, CURLOPT_HEADER, 0);
//设置代理服务器的IP
curl_setopt($ch, CURLOPT_PROXY, '10.167.32.133');
//设置代理服务的端口号
curl_setopt($ch, CURLOPT_PROXYPORT, 8080);
//设置http代理
curl_setopt($ch, CURLOPT_PROXYTYPE, CURLPROXY_HTTP);
//请求HTTPS开头的URL
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE);
//curl会话执行
curl_exec($ch);
//关闭会话
curl_close($ch);
fsockopen、curl、file_get_contents 效率比较
1、curl和fsockopen
fsockopen 是底层调用,属于网络系统的socket调用,而curl经过的包装支持https认证,http post 方法、http put 方法、FTP上传、Kerberos认证、http代理通道等,功能强大。fsockopen 返回的是没有处理过的数据,包括数据的长度数据内容和数据的结束符,而curl是处理后的内容
curl 更加方便,但是其参数很多,配置稍微复杂,fsockopen 则有固定的几个参数,简单,但是获取结果可能需要在做处理
2、file_get_contents
file_get_contents 调用外部文件容易超时报错,curl效率比file_get_contents() 和 fsockopen() 高一些,原因是curl会自动对DNS信息进行缓存
file_get_contents 需要php.ini 里开启allow_url_fopen,请求http 是,使用的是http_fopen_wrapper 。
file_get_contents 单个执行效率高,返回没有头的信息
fsockopen 比较底层,可以设置基于UDP或是TCP协议取交互,配置麻烦,不以操作。返回完整信息
总之,file_get_contents 和 curl 能干的,socket 都能干。socket 能干的,curl 就不一定了。file_get_contents 更多的时候只是去拉取数据。效率比较高也比较简单
3、curl 和 file_get_contents
1、fopen /file_get_contents 每次请求都会重新做DNS查询,并不对DNS信息进行缓存。但是CURL会自动对DNS信息进行缓存。对同一域名 下的网页或者图片的请求只需要一次DNS查询。这大大减少了DNS查询的次数。所以CURL的性能比fopen /file_get_contents 好很多
2、fopen /file_get_contents在请求HTTP时,使用的是http_fopen_wrapper,不会keeplive。而curl却可以。这样在多次请求多个链接时,curl效率会好一些
3、fopen / file_get_contents函数会受到php.ini文件中allow_url_open选项配置的影响。如果该配置关闭了,则该函数也就失效了。而curl不受该配置的影响
4、curl可以模拟多种请求,例如:POST数据,表单提交等,用户可以按照自己的需求来定制请求。而fopen / file_get_contents只能使用get方式获取数据
结论:curl 效率及稳定都比 file_get_contents() 要好,fsockopen 也很强大,但是比较偏底层