专栏首页solate 杂货铺php curl 发送post请求 

php curl 发送post请求 

在很多任务中我们可能需要发送post请求,但是又不需要或者不想用界面表单的方式,这时就可以使用php中的curl 来模拟表单的提交

首先封装一个curl 方法

private function curlExec($options) {
		$ch = curl_init ();		
		curl_setopt_array ( $ch, $options );
		// 返回json string
		$result = curl_exec ( $ch );
		// 检查是否有错误发生
		if (curl_errno ( $ch )) {
			$error = "curl exec error! " . curl_error ( $ch );
			$result = array ( "code" => "1005", "info" => $error );
		}
		curl_close ( $ch );
		return $result;
	}

然后就就是对参数设置的问题, 官方文档刚开始有点不理解,现在详细说明一下:

curl_setopt()来说,传递一个数组到CURLOPT_POST将会把数据以multipart/form-data的方式编码,然而传递一个URL-encoded字符串将会以application/x-www-form-urlencoded的方式对数据进行编码。

首先是传递进去$post为array, 而且配置中没有使用CURLOPT_POST

CURLOPT_POST=1

这个参数是将 multipart/form-data 类型转换为 application/x-www-form-urlencoded 格式,

如下面的例子传递post请求是以  multipart/form-data 格式:

$post = array ('imagefile' => '@' . $uploadFilePath, 'configfile' => $data );	
$url = $this->cfg['baseUrl'].'/upload';		
$options = array (
    CURLOPT_URL => $url,
    CURLOPT_POSTFIELDS => $post,
    CURLOPT_HEADER => 0,
    CURLOPT_RETURNTRANSFER => 1,
    CURLOPT_TIMEOUT => 28,
    CURLOPT_CONNECTTIMEOUT => $this::MAX_CONNECTION_TIME
);

下面说URL-encoded 方式,其实就是将参数已字符串拼接的方式进行传递.

如果传递post请求是以 application/x-www-form-urlencoded  , 就需要先将参数 用字符串拼接,不能使用数组.

不放心的情况下可是设置 CURLOPT_POST=1 这个要设置在 CURLOPT_POSTFIELDS= $post 下面,

保证 CONTENT_TYPE 始终为 application/x-www-form-urlencoded .

例子如下:

$post = 'ids=123&name=aa';
$url = 'http://localhost/Test/test.php';		
$options = array (
    CURLOPT_URL => $url,				
    CURLOPT_HEADER => 0,
    CURLOPT_RETURNTRANSFER => 1,					
    CURLOPT_POSTFIELDS => $post,
    CURLOPT_POST=> 1,
    CURLOPT_TIMEOUT => 28,
    CURLOPT_CONNECTTIMEOUT => $this::MAX_CONNECTION_TIME,				
);

还有一种解决方式就是自己写head头部信息,

$options = array (
    ...
    CURLOPT_HTTPHEADER= array('Content-Type: application/x-www-form-urlencoded'),
);

如果需要其他Head可以自己添加.

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 【代码审计】EasySNS_V1.6远程图片本地化导致Getshell

    ESPHP开发框架基础上开发而成的EasySNS极简社区为全新数据库架构和程序结构。本文以EasySNS_V1.6作为代码审计的目标,分享一个远程图片本地化导致...

    Bypass
  • 【代码审计】SQL二次编码注入漏洞实例(附tamper脚本)

    在/content/search/index.php中,首先对参数keyword进行非法字符检测:

    Bypass
  • 【代码审计】PHPYun_v4.3 CMS重装到Getshell

    PHPYun是一款国内流行的人才网站管理系统,做了一些测试,发现了一点问题,做个记录,未深入。

    Bypass
  • 【代码审计】ThinkSNS_V4 后台任意文件下载导致Getshell

    ThinkSNS(简称TS),一款全平台综合性社交系统,为国内外大中小企业和创业者提供社会化软件研发及技术解决方案,目前最新版本为ThinkSNS+(简称TS+...

    Bypass
  • 【代码审计】CLTPHP_v5.5.3 任意文件上传漏洞

    在代码审计中,发现了一个无需权限的任意文件上传漏洞,可批量,已提交CNVD,分享一下思路。

    Bypass
  • 【代码审计】QYKCMS后台任意文件上传、任意文件读取漏洞

    青云客网站管理系统(QYKCMS)是青云客开发的一款基于PHP+MySql的轻量级智能建站系统。在T00ls看到两篇QYKCMS的代码审计文章,也下载了一套回来...

    Bypass
  • 【代码审计】LaySNS_v2.2.0漏洞分析

    LaySNS轻社区是一套基于ThinkPHP5+LayUI开发的集内容发布与社区交流与一体的综合网站系统。它的界面清新而大气,简洁而优雅。本文以LayS...

    Bypass
  • 【代码审计】CLTPHP_v5.5.3前台XML外部实体注入漏洞

    在代码审计中,发现了微信接口存在XML外部实体注入漏洞,后面和小伙伴sn00py交流,他也发现了这个点。XML外部实体注入漏洞的代码实例比较少,这边也分享一下思...

    Bypass
  • 【代码审计】任意文件读取漏洞实例

    大多数网站都提供读取文件功能,一般实现过程是,根据参数filename的值,获得该文件在网站上的绝对路径,读取文件。 这里,通过两个任意文件读取漏洞实例...

    Bypass
  • 【代码审计】两个简单的CSRF漏洞实例

    CSRF(Cross-site request forgery)跨站请求伪造,通过伪装来自受信任用户的请求来利用受信任的网站,这边分享两个漏洞代码示例。

    Bypass

扫码关注云+社区

领取腾讯云代金券