首页 > 解决方案 > 如何使用 php curl 库包含“data-urlencode”

问题描述

我正在尝试使用 Curl php 连接 twilio api。以下是来自 Twilio api 的代码

我使用了一个在线工具 php 来卷曲,但它没有使用数据编码 url 转换代码。

被标记为重复的问题没有关于 --data-urlencode 的信息。我已经尝试过那里提到的解决方案,但它仍然没有按照预期的方式工作。

curl -X POST https://api.twilio.com/2010-04-01/Accounts/ACCOUNTID/Messages.json \
--data-urlencode "From=+122344444" \
--data-urlencode "Body=Body" \
--data-urlencode "To=+13101111111" \
-u ACCOUNTID:PASSWORD

PHP代码:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'ACCOUNTID' . ':' . 'PASSWORD');

预期的结果是得到消息,但我得到

{"code": 21603, "message": "A 'From' phone number is required.", "more_info": "https://www.twilio.com/docs/errors/21603", "status": 400} 

我得到这个的原因是我不确定如何在 curl php 中从 body 和 to 传递。

标签: phpcurltwilio

解决方案


你缺少的是

curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));

$payload在哪里

$payload = [
    'From' => '+122344444',
    'To' => '+13101111111',
    'Body'   => 'This is the body...'
];


PHP代码:

$payload = [
    'From' => '+122344444',
    'To' => '+13101111111',
    'Body'   => 'This is the body...'
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_USERPWD, 'ACCOUNTID' . ':' . 'PASSWORD');
curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($payload));

推荐阅读