PHP的curl有三种请求数据的方式你需要知道raw、form-data、x-www-form-urlencoded
2021/10/19 12:39:37
本文主要是介绍PHP的curl有三种请求数据的方式你需要知道raw、form-data、x-www-form-urlencoded,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
PHP提供的curl是非常常用的功能,估计很多小伙伴还没有研究透HTTP协议就可以傻瓜式的使用了,今天不会学习HTTP的知识,而是要分享一个关于curl开发的细节,就是HTTP请求头协议中的 Content-Type 字段在PHP的curl中的使用。我会在另一篇文章中分享HTTP协议相关知识。
我们在使用PHP进行开发过程中,会经常对接别人的接口,尤其是当下互联互通的大趋势下,使用curl的场景会更多,有些细节是需要特别注意的。
今天要讲的HTTP请求头的Content-Type字段,就是在curl发送请求的时候需要指定以何种方式来请求数据,按照postman的POST方法的分类,常用的有3类:
1、form-data 就是 multipart/form-data 使用表单的方式来发送数据 是curl采用的默认发送方式。
2、x-www-form-urlencoded 就是 application/x-www-form-urlencoded 把请求的内容转变成url参数的形式进行发送,如:s1=red&s2=blue,这是标准的编码格式,但在curl中却不是默认的发送方式。
3、raw(text/plain application/json text/xml等) 是以纯文本的方式发送数据,可以选择json、xml等格式
举个用postman以form-data发送的例子来说明:
form-data的方式是以boundary为分隔符,表单中每个键值对字段是以Content-Disposition来分割。
1 <?php 2 3 $curl = curl_init(); 4 5 curl_setopt_array($curl, array( 6 CURLOPT_URL => "http://www.baidu.com", 7 CURLOPT_RETURNTRANSFER => true, 8 CURLOPT_ENCODING => "", 9 CURLOPT_MAXREDIRS => 10, 10 CURLOPT_TIMEOUT => 30, 11 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 12 CURLOPT_CUSTOMREQUEST => "POST", 13 CURLOPT_POSTFIELDS => "------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"s1\"\r\n\r\nred\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW\r\nContent-Disposition: form-data; name=\"s2\"\r\n\r\nblue\r\n------WebKitFormBoundary7MA4YWxkTrZu0gW--", 14 CURLOPT_HTTPHEADER => array( 15 "cache-control: no-cache", 16 "content-type: multipart/form-data; boundary=----WebKitFormBoundary7MA4YWxkTrZu0gW" 17 ), 18 )); 19 20 $response = curl_exec($curl); 21 $err = curl_error($curl); 22 23 curl_close($curl); 24 25 if ($err) { 26 echo "cURL Error #:" . $err; 27 } else { 28 echo $response; 29 }
用postman以x-www-form-urlencoded发送的例子:
PHP的curl默认是采用form-data方式,所以要把选项CURLOPT_POSTFIELDS的值用http_build_query()函数转化成URL-ENCODE的形式才会以application/x-www-form-urlencoded的方式进行请求。
1 <?php 2 3 $curl = curl_init(); 4 5 curl_setopt_array($curl, array( 6 CURLOPT_URL => "http://www.baidu.com", 7 CURLOPT_RETURNTRANSFER => true, 8 CURLOPT_ENCODING => "", 9 CURLOPT_MAXREDIRS => 10, 10 CURLOPT_TIMEOUT => 30, 11 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 12 CURLOPT_CUSTOMREQUEST => "POST", 13 CURLOPT_POSTFIELDS => "s1=red&s2=blue&undefined=", 14 CURLOPT_HTTPHEADER => array( 15 "Content-Type: application/x-www-form-urlencoded", 16 "cache-control: no-cache" 17 ), 18 )); 19 20 $response = curl_exec($curl); 21 $err = curl_error($curl); 22 23 curl_close($curl); 24 25 if ($err) { 26 echo "cURL Error #:" . $err; 27 } else { 28 echo $response; 29 }
另外再补充一下,form-data 是可以添加文件上传的,因为是按照提交表单的方式来发送数据的,所以PHP的curl默认采用这种方式,而x-www-form-urlencoded 是不可以上传文件的。
用postman以raw发送的例子:
1 <?php 2 3 $curl = curl_init(); 4 5 curl_setopt_array($curl, array( 6 CURLOPT_URL => "http://www.baidu.com", 7 CURLOPT_RETURNTRANSFER => true, 8 CURLOPT_ENCODING => "", 9 CURLOPT_MAXREDIRS => 10, 10 CURLOPT_TIMEOUT => 30, 11 CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1, 12 CURLOPT_CUSTOMREQUEST => "POST", 13 CURLOPT_POSTFIELDS => "{\"s1\":\"red\",\"s2\":\"blue\"}", 14 CURLOPT_HTTPHEADER => array( 15 "Content-Type: application/json", 16 "cache-control: no-cache" 17 ), 18 )); 19 20 $response = curl_exec($curl); 21 $err = curl_error($curl); 22 23 curl_close($curl); 24 25 if ($err) { 26 echo "cURL Error #:" . $err; 27 } else { 28 echo $response; 29 }
所以,在使用PHP的curl进行远程请求数据的时候,不要盲目的使用,应该要注意选择何种请求的方式。
————————————————
版权声明:本文为CSDN博主「神男鲁班」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/leigin/article/details/89358126
这篇关于PHP的curl有三种请求数据的方式你需要知道raw、form-data、x-www-form-urlencoded的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-19php8的协程和hyperf的协程有什么区别?-icode9专业技术文章分享
- 2024-12-19php8 的fiber是什么?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-12-05怎么在php8,1 里面开启 debug?-icode9专业技术文章分享
- 2024-11-29使用PHP 将ETH账户的资产汇集到一个账户
- 2024-11-23怎么实现安卓+php 热更新方案?-icode9专业技术文章分享
- 2024-11-22PHP 中怎么实现判断多个值是否为空、null 或者为 false?-icode9专业技术文章分享
- 2024-11-11开源 PHP 商城项目 CRMEB 二次开发和部署教程
- 2024-11-09怎么使用php在kaufland平台刊登商品?-icode9专业技术文章分享
- 2024-11-05PHP的抽象类和接口是什么,有什么区别-icode9专业技术文章分享