PHP 5.6 的Curl POST

本文介绍了在Windows环境下,使用PHP 5.6的Curl进行HTTP POST请求时,如何正确提交键值对。重点指出在设置Content-Type后,仍需使用http_build_query()函数编码数据,以确保服务器能正确解析POST数据。
摘要由CSDN通过智能技术生成

1、一般的http post 支持提交键值对和二进制数据,win 下使用php 5.6的curl可以这样模拟

如下代码:

        $ch = curl_init();
        
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	//curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_POST, true);
        
        //curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        //curl_setopt($ch,CURLOPT_HTTPHEADER,array("Content-type:application/x-www-form-urlencode"));

        curl_setopt($ch, CURLOPT_POSTFIELDS, $data);

如果data是一个键值对的数组,那么抓包的结果都是:

POST /IG_ePolicy/EncryptPassword HTTP/1.1
Host: 
Accept: */*
Content-Length: 151
Expect: 100-continue
Content-Type: application/x-www-form-urlencoded; boundary=------------------------d30a0827949e2a44

--------------------------d30a0827949e2a44
Content-Disposition: form-data; name="Password"

password
--------------------------d30a0827949e2a44--

就算是设置了Content-Type 也是同样的结果,就是curl默认是以二进制数据的方式提交给服务器的和我们平常的表单提交并不一致服务端如果使用键值对的方式获取就有可能取不到不,所以这里$data 应该使用http_build_query($data) 编码一次。


2、表单正确的提交方式医改如下代码:


        $data = array("Password"=>"password");
        
        $ch = curl_init();
        
        //curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
	    //curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
        
        curl_setopt($ch, CURLOPT_URL,$url);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 0);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_TIMEOUT, 30);
        curl_setopt($ch, CURLOPT_POST, true);
        
         // curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded'));
        //curl_setopt($ch,CURLOPT_HTTPHEADER,array("Content-type:application/x-www-form-urlencode"));


        curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($data));
post到服务器端的数据就是:
POST /IG_ePolicy/EncryptPassword HTTP/1.1
Host: 
Accept: */*
Content-Length: 17
Content-Type: application/x-www-form-urlencoded


Password=password

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值