This article mainly introduces to you some precautions for using the curl function to send Post requests in PHP. The article introduces it in detail through sample codes and explanations. It has certain reference value for everyone to learn or use PHP. Friends who need it can follow the editor to learn.
Preface
I encountered a requirement at work a few days ago. When the user clicks a button, a post request is initiated in the background. Come to me, I accept the data passed over. At first, my colleague sent the message using the http_request()
method publically encapsulated by the company framework. The code is as follows:
public function http_request( $url, $post = '', $timeout = 5 ){ if( empty( $url ) ){ return ; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_HEADER, 0); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, FALSE); curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, FALSE); if( $post != '' && !empty( $post ) ){ curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $post); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/json', 'Content-Length: ' . strlen($post))); } curl_setopt($ch, CURLOPT_TIMEOUT, $timeout); $result = curl_exec($ch); curl_close($ch); return $result; }
At first I didn’t notice that the data passed was a json string encoded by application/json
. I directly accepted the application/x-www-form-urlencoded
encoding in the background. format data method to retrieve the passed data (that is, directly obtained using the $_POST
method), the result is of course nothing and nothing is retrieved. Later, my colleague directly changed the http_request()
method and directly passed the data in the application/x-www-form-urlencoded
encoding format, so I didn’t make any changes.
Regarding the above question, I have always wondered why I didn’t get the data passed at that time.
The project is basically completed today, and the following has been studied.
##curl() function in php When making a post request, the format of passing data can be in the following ways:
key=>valuekey-value pair string formed by concatenating parameters. The form is as follows:
name=xxx&age=23$sex=1
application/x-www-form-urlencoded by default .
key=>valuekey-value pair array composed of parameters (can only be a one-dimensional array, higher-dimensional arrays will report an error).
[ name="xxx" , age = 23 , sex = 男 ]
##The request parameter defaults to
format. As mentioned above,
When making a post request, only one-dimensional arrays can be passed as parameters. So what should be done if you want to pass multi-dimensional arrays?
(3): Process the multi-dimensional array with
http_build_query() and wait for a string in key=>value key-value pair format. As shown below:
$data = [ "msg"=>"这是一条测试数据", "xxx" => "yyyy", "msg_data" => [ "name"=>"sunms", "age"=>23, "sex"=>"男", "content"=>[ 1,2,3 ] ], ];
##The following string will be obtained:
msg=这是一条测试数据&xxx=yyyy&msg_data[name]=sunms&msg_data[age]=23&msg_data[sex]=男&msg_data[content][0]=1&msg_data[content][1]=2&msg_data[content][2]=3
This method is also coded through
application/x-www-form-urlencoded. The receiver can pass $_POST Get it directly.
(4): Convert the multi-dimensional array into a string in json format, encode the string in application/json
format, and pass
or $GLOBALS['HTTP_RAW_POST_DATA']
to obtain the passed json format string, and then convert the json format string into an array for processing.
$data = []; $data_string = json_encode($data); ..... //设置header信息 curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Content-Type: application/json', 'Content-Length: ' . strlen($data_string)) );
Note:
For application/json format The encoded data, $_POST cannot be obtained directly, it needs to be obtained through file_get_contents("php://input")
or $GLOBALS['HTTP_RAW_POST_DATA']
way to obtain. The above is the entire content of this article, I hope it will be helpful to everyone's study.
php
Implementation method of loop traversal of one-dimensional arrayHow PHP and MYSQL implement paging navigation ideas
##php
array_reverse Detailed explanation of returning an array in reverse order
The above is the detailed content of Things to note when using PHP curl function to send Post requests. For more information, please follow other related articles on the PHP Chinese website!