Rumah pembangunan bahagian belakang tutorial php PHP使用curl函数发送Post请求的注意事项实例详解

PHP使用curl函数发送Post请求的注意事项实例详解

Mar 22, 2017 am 10:20 AM

前言
前几天在工作中遇到了一个需求,当用户点击了某个按钮以后,后台发起一个post请求到我这里,我接受传递过来的数据。一开始同事是用公司框架公共封装的

http_request()
Salin selepas log masuk
Salin selepas log masuk

方法进行发送的,代码如下:

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;
 }
Salin selepas log masuk

一开始我并没有留意传递过来的数据是

application/json
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

编码的json字符串,我在后台直接用接受

application/x-www-form-urlencoded
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

编码格式的数据方式来取传递过来的数据(就是直接用的

$_POST
Salin selepas log masuk
Salin selepas log masuk

方式获取的),结果当然没什么也没有取到了。后来,同事直接改了

http_request()
Salin selepas log masuk
Salin selepas log masuk

方法,直接传递

application/x-www-form-urlencoded
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

编码格式的数据过来,我这就没有做更改。

对于上面的问题,我一直纳闷当时为什么没有拿到传递过来的数据。

今天项目基本完工,研究了以下。

php中的

curl()
Salin selepas log masuk
Salin selepas log masuk

函数进行post请求的时候,传递数据的格式可以有以下几种方式:

(1):由参数拼接而成的

key=>value
Salin selepas log masuk
Salin selepas log masuk

键值对字符串。形如以下:

name=xxx&age=23$sex=1
Salin selepas log masuk

这种请求参数默认是按照

application/x-www-form-urlencoded
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

进行编码的。
(2):由参数组成的

key=>value
Salin selepas log masuk
Salin selepas log masuk

键值对数组(只能是一维数组,更高维度的数组会报错)。

形如以下格式:

[ name="xxx" , age = 23 , sex = 男 ]
Salin selepas log masuk

这种请求参数默认是按照

multipart/form-data
Salin selepas log masuk

格式进行编码的。

上面说了,

curl()
Salin selepas log masuk
Salin selepas log masuk

进行post请求的时候,只能传递一维数组作为传递的参数,那么如果想要传递多维数组需要怎么处理那?

有两种方式可以来处理,分别是下面的方式3以及方式4。

(3):将多维数组进行

http_build_query()
Salin selepas log masuk

进行处理,等到一个key=>value键值对格式的字符串。

如下面所示:

$data = [
          "msg"=>"这是一条测试数据",
          "xxx" => "yyyy",
          "msg_data" => [
                          "name"=>"sunms",
                          "age"=>23,
                          "sex"=>"男",
                          "content"=>[
                                 1,2,3
                                ]
                       ],
       ];
Salin selepas log masuk



将得到以下的字符串:

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
Salin selepas log masuk

这种方式也是通过

application/x-www-form-urlencoded进
Salin selepas log masuk

行编码的,在接收方可以通过$_POST直接获取。

(4):将多维数组转换为json格式的字符串,对字符串进行

application/json
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

格式编码,在接收方通过

file_get_contents(“php://input”)
Salin selepas log masuk
Salin selepas log masuk

或者

$GLOBALS[‘HTTP_RAW_POST_DATA']
Salin selepas log masuk
Salin selepas log masuk

的方式获取传递过来的json格式的字符串,然后将json格式的字符串转换为数组进行处理。

$data = [];
$data_string = json_encode($data);
.....
//设置header信息
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
               'Content-Type: application/json',
               'Content-Length: ' . strlen($data_string))
      );
Salin selepas log masuk


注意:对于

application/json
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

格式编码的数据,

$_POST
Salin selepas log masuk
Salin selepas log masuk

是不能直接获取的,需要通过

file_get_contents(“php://input”)
Salin selepas log masuk
Salin selepas log masuk

或者

$GLOBALS[‘HTTP_RAW_POST_DATA']
Salin selepas log masuk
Salin selepas log masuk

的方式获取。

总结
 以上就是PHP使用curl函数发送Post请求的注意事项实例详解的内容,更多相关内容请关注PHP中文网(www.php.cn)!

相关文章:

php利用curl发起get请求时url的参数问题

PHP中的使用curl发送请求(GET请求和POST请求)

PHP开发技巧(八)-CURL请求的代码详情

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
2 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Repo: Cara menghidupkan semula rakan sepasukan
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Cara mendapatkan biji gergasi
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Konfigurasi Projek CakePHP Konfigurasi Projek CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan memahami Pembolehubah Persekitaran, Konfigurasi Umum, Konfigurasi Pangkalan Data dan Konfigurasi E-mel dalam CakePHP.

Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Panduan Pemasangan dan Naik Taraf PHP 8.4 untuk Ubuntu dan Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Tarikh dan Masa CakePHP Tarikh dan Masa CakePHP Sep 10, 2024 pm 05:27 PM

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Muat naik Fail CakePHP Muat naik Fail CakePHP Sep 10, 2024 pm 05:27 PM

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

Penghalaan CakePHP Penghalaan CakePHP Sep 10, 2024 pm 05:25 PM

Dalam bab ini, kita akan mempelajari topik berikut yang berkaitan dengan penghalaan ?

Bincangkan CakePHP Bincangkan CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Cara Menyediakan Kod Visual Studio (Kod VS) untuk Pembangunan PHP Dec 20, 2024 am 11:31 AM

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah Mencipta CakePHP Pengesah Mencipta CakePHP Sep 10, 2024 pm 05:26 PM

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

See all articles