php curl方法总结
0x00 前言
做web安全的同时也需要优秀的开发能力,所以最近想提升一下自己python和php的开发能力,对一些经常用的方法做一个总结,当作笔记。
curl方法在总结ssrf漏洞时用过,但是我当时没有做详细的说明,就放在这里总结一下。
0x00 curl
PHP的libcurl库用来与各种的服务器使用各种类型的协议进行连接和通讯。
libcurl目前支持http、https、ftp、gopher、telnet、dict、file和ldap协议。libcurl同时也支持HTTPS认证、HTTP POST、HTTP PUT、 FTP 上传(这个也能通过PHP的FTP扩展完成)、HTTP 基于表单的上传、代理、cookies和用户名+密码的认证。
PHP中使用cURL实现Get和Post请求的方法。
百度百科用一句话总结了curl的能力:
- php curl就是php中的数据传输神器。
0x01 基本方法
可以看到php curl库中封装的方法特别多,但我们平时用curl请求,大多数情况要做的的基本步骤有如下四步:
①:初始化
curl_init()
初始化一个新的会话,返回一个cURL句柄,供curl_setopt(), curl_exec()和curl_close() 函数使用。
用法:
- curl_init(url)
参数:
- url:如果提供了该参数,CURLOPT_URL 选项将会被设置成这个值。
返回值:
- 如果成功,返回一个cURL句柄,出错返回 FALSE。
②:设置属性
curl_setopt()
为给定的cURL会话句柄设置一个选项。
用法:
- curl_setopt ( resource $ch , int $option , mixed $value )
参数:
- ch: 由 curl_init() 返回的 cURL 句柄。
- option: 需要设置的CURLOPT_XXX选项。
- value:将设置在option选项上的值。
返回值:
- 成功时返回 TRUE, 或者在失败时返回 FALSE。
③:执行并获取结果
curl_exec()
执行给定的cURL会话。
用法:
- curl_exec ( resource $ch )
参数:
- ch: 由 curl_init() 返回的 cURL 句柄。
返回值:
- 成功时返回 TRUE, 或者在失败时返回 FALSE。 然而,如果 CURLOPT_RETURNTRANSFER选项被设置,函数执行成功时会返回执行的结果,失败时返回 FALSE 。
④:释放句柄
curl_close()
关闭一个cURL会话并且释放所有资源。cURL句柄ch 也会被释放。
用法:
- curl_close ( resource $ch )
参数:
- ch: 由 curl_init() 返回的 cURL 句柄。
返回值:
- 无
0x02 get请求
get请求是http请求中最基本的请求,一个普通的get请求只需初始化后,配置好url和一定量的参数,然后执行即可。
1 |
|
可以看到,设置CURLOPT_RETURNTRANSFER为0,使用php请求百度页面,结果如下:
1 |
|
如果设置CURLOPT_RETURNTRANSFER为1,则不会将获取的页面直接输出在页面内,结果如下:
0x03 post请求
post请求也是http请求中很重要的一种,既然是post请求,肯定要额外设置要post的数据才行,curl中需要配置CURLOPT_POST为1代表本次请求是post类型,然后再将要请求的数据通过CURLOPT_POSTFIELDS配置进本次请求,然后执行就可以提交post请求。
这里我们用上一篇有关iframe框架钓鱼的留言界面进行测试,我们将留言的昵称和内容设置好,通过php curl方法请求。
1 |
|
根据返回的页面,发现这条留言已经被写入。
0x04 总结
在需要使用php获取页面内容时,其实可以通过更加简单的file_get_contents()函数,如下:
1 |
|
但是学习curl是非常有必要的,curl虽然配置的参数更繁杂,但是相对应的支持的操作也就更多,比如cookies、验证、表单提交、文件上传等等,需要更加细致的操作时,就应该选用curl。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!