最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
PHP中file_get_contents设置header请求头curl传输选项参数详解说明
时间:2026-09-23 10:50:01 编辑:袖梨 来源:一聚教程网
PHP中fopen,file_get_contents,curl函数的区别:
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方式获取数据。file_get_contents 获取远程文件时会把结果都存在一个字符串中 fiels函数则会储存成数组形式。
file_get_contents的使用
file_get_contents() 函数将指定 URL 的文件读入一个字符串并返回。
file_get_contents(path, include_path, context, start, max_length)
path:要读取的路径或链接。include_path:是否在路径中搜索文件,搜索则设为 1,默认为 false。context:修改流的行为,如超时时间,GET / POST 等。start:开始读文件的位置。max_length:读取文件的字节数。
curl的使用
PHP默认是不支持curl功能的,因此如果要用curl的话,首先需要在php.ini中开启该功能,即去掉 ;extension= php_curl.dll 前面的分号,然后保存后重启apache/iis就好了。
<?php// 创建一个新 cURL 资源$ch = curl_init();// 设置URL和相应的选项curl_setopt($ch, CURLOPT_URL, "http://**local*host/test.php"); // 需要获取的 URL 地址,也可以在 curl_init() 初始化会话的时候。curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'GET');curl_setopt($ch, CURLOPT_HEADER, false); // 启用时会将头文件的信息作为数据流输出。curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10); // 在尝试连接时等待的秒数。设置为 0,则无限等待。curl_setopt($ch, CURLOPT_TIMEOUT, 10); // 允许 cURL 函数执行的最长秒数。curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // TRUE 将 curl_exec() 获取的信息以字符串返回,而不是直接输出。// 抓取 URL 并把它传递给浏览器$ret = curl_exec($ch);var_dump($ret);// 关闭 cURL 资源,并且释放系统资源curl_close($ch);?>
file_get_contents设置header请求头示例
<?php$context_options = array('http' =>array('method' => "GET",'header' => "User-Agent:Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36rnReferer:http://www.***.com/rn",'timeout' => 120,));$context = stream_context_create($context_options);$html = file_get_contents('https://www.dem***o.com/',FALSE,$context);
如果想在请求头中加入referer,修改‘header’中的http://www.***.com/
curl_setopt中的cURL传输选项参数列表
bool curl_setopt ( resource $ch , int $option , mixed $value )
为给定的cURL会话句柄设置一个选项。
参数
ch
由 curl_init() 返回的 cURL 句柄。
option
需要设置的CURLOPT_XXX选项。
value
将设置在option选项上的值。
对于下面的这些option的可选参数,value应该被设置一个bool类型的值:
启用时关闭curl传输的进度条,此项的默认设置为启用。
CURLOPT_NOSIGNAL启用时忽略所有的curl传递给php进行的信号。在SAPI多线程传输时此项被默认启用。cURL 7.10时被加入。CURLOPT_POST启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。CURLOPT_PUT启用时允许HTTP发送文件,必须同时设置CURLOPT_INFILE和CURLOPT_INFILESIZE。CURLOPT_RETURNTRANSFER将curl_exec()获取的信息以文件流的形式返回,而不是直接输出。CURLOPT_SSL_VERIFYPEER禁用后cURL将终止从服务端进行验证。使用CURLOPT_CAINFO选项设置证书使用CURLOPT_CAPATH选项设置证书目录 如果CURLOPT_SSL_VERIFYPEER(默认值为2)被启用,CURLOPT_SSL_VERIFYHOST需要被设置成TRUE否则设置为FALSE。自cURL 7.10开始默认为TRUE。从cURL 7.10开始默认绑定安装。CURLOPT_TRANSFERTEXT启用后对FTP传输使用ASCII模式。对于LDAP,它检索纯文本信息而非HTML。在Windows系统上,系统不会把STDOUT设置成binary模式。CURLOPT_UNRESTRICTED_AUTH在使用CURLOPT_FOLLOWLOCATION产生的header中的多个locations中持续追加用户名和密码信息,即使域名已发生改变。CURLOPT_UPLOAD启用后允许文件上传。CURLOPT_VERBOSE启用时会汇报所有的信息,存放在STDERR或指定的CURLOPT_STDERR中。Note:
PHP自动地设置这个选项为TRUE,这个选项仅仅应当在以调试为目的时被改变。
对于下面的这些option的可选参数,value应该被设置一个integer类型的值:
对于下面的这些option的可选参数,value应该被设置一个string类型的值:
使用一个自定义的请求信息来代替"GET"或"HEAD"作为HTTP请求。这对于执行"DELETE"或者其他更隐蔽的HTTP请求。有效值如"GET","POST","CONNECT"等等。也就是说,不要在这里输入整个HTTP请求。例如输入"GET /index.html HTTP/1.0rnrn"是不正确的。
CURLOPT_EGDSOCKET类似CURLOPT_RANDOM_FILE,除了一个Entropy Gathering Daemon套接字。CURLOPT_ENCODINGHTTP请求头中"Accept-Encoding: "的值。支持的编码有"identity","deflate"和"gzip"。如果为空字符串"",请求头会发送所有支持的编码类型。在cURL 7.10中被加入。CURLOPT_FTPPORT这个值将被用来获取供FTP"POST"指令所需要的IP地址。"POST"指令告诉远程服务器连接到我们指定的IP地址。这个字符串可以是纯文本的IP地址、主机名、一个网络接口名(UNIX下)或者只是一个'-'来使用默认的IP地址。CURLOPT_INTERFACE网络发送接口名,可以是一个接口名、IP地址或者是一个主机名。CURLOPT_KRB4LEVELKRB4 (Kerberos 4) 安全级别。下面的任何值都是有效的(从低到高的顺序):"clear"、"safe"、"confidential"、"private".。如果字符串和这些都不匹配,将使用"private"。这个选项设置为NULL时将禁用KRB4 安全认证。目前KRB4 安全认证只能用于FTP传输。CURLOPT_POSTFIELDS全部数据使用HTTP协议中的"POST"操作来发送。要发送文件,在文件名前面加上@前缀并使用完整路径。这个参数可以通过urlencoded后的字符串类似'para1=val1¶2=val2&...'或使用一个以字段名为键值,字段数据为值的数组。如果value是一个数组,Content-Type头将会被设置成multipart/form-data。CURLOPT_PROXYHTTP代理通道。CURLOPT_PROXYUSERPWD一个用来连接到代理的"[username]:[password]"格式的字符串。CURLOPT_RANDOM_FILE一个被用来生成SSL随机数种子的文件名。CURLOPT_RANGE以"X-Y"的形式,其中X和Y都是可选项获取数据的范围,以字节计。HTTP传输线程也支持几个这样的重复项中间用逗号分隔如"X-Y,N-M"。CURLOPT_REFERER在HTTP请求头中"Referer: "的内容。CURLOPT_SSL_CIPHER_LIST一个SSL的加密算法列表。例如RC4-SHA和TLSv1都是可用的加密列表。CURLOPT_SSLCERT一个包含PEM格式证书的文件名。CURLOPT_SSLCERTPASSWD使用CURLOPT_SSLCERT证书需要的密码。CURLOPT_SSLCERTTYPE证书的类型。支持的格式有"PEM"(默认值),"DER"和"ENG"。在cURL 7.9.3中被加入。CURLOPT_SSLENGINE用来在CURLOPT_SSLKEY中指定的SSL私钥的加密引擎变量。CURLOPT_SSLENGINE_DEFAULT用来做非对称加密操作的变量。CURLOPT_SSLKEY包含SSL私钥的文件名。CURLOPT_SSLKEYPASSWDNote:
在确定服务器支持这个自定义请求的方法前不要使用。
在CURLOPT_SSLKEY中指定了的SSL私钥的密码。
CURLOPT_SSLKEYTYPECURLOPT_SSLKEY中规定的私钥的加密类型,支持的密钥类型为"PEM"(默认值)、"DER"和"ENG"。CURLOPT_URL需要获取的URL地址,也可以在curl_init()函数中设置。CURLOPT_USERAGENT在HTTP请求中包含一个"User-Agent: "头的字符串。CURLOPT_USERPWD传递一个连接中需要的用户名和密码,格式为:"[username]:[password]"。Note:
由于这个选项包含了敏感的密码信息,记得保证这个PHP脚本的安全。
对于下面的这些option的可选参数,value应该被设置一个数组:
对于下面的这些option的可选参数,value应该被设置一个流资源 (例如使用fopen()):
对于下面的这些option的可选参数,value应该被设置为一个回调函数名:
结论
curl支持很多协议,有FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE以及LDAP,也就是说,它能做到很多file_get_content/fopen做不到的事情。curl 可以进行 DNS 缓存,同一个域名下的图片或其它资源只需要进行一次DNS查询。curl 相对来说更加快速稳定,访问量高的时候首选 curl,缺点就是相对于 file_get_contents 配置繁琐一点,file_get_contents 适用与处理小访问的应用。
到此这篇关于PHP中file_get_contents设置header请求头,curl传输选项参数详解说明的文章就介绍到这了,更多相关PHP中fopen、file_get_contents和curl说明内容请搜索一聚教程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持一聚教程网!
相关文章
- thinkphp使用url请求调用ThinkApi天气教程【图文详解】 09-23
- ThinkPHP6使用JWT+中间件实现Token验证实例详解 09-23
- Thinkphp6配置并使用redis图文详解 09-23
- PHP应用代码复杂度检测使用方法 09-23
- php代码审计之ThinkPHP5的文件包含漏洞详解 09-23
- PHP利用redis位图实现简单的签到功能 09-23