【发布时间】:2020-11-21 20:12:06
【问题描述】:
我知道这不是新的,使用 php 使用 curl 进行发布请求,但我正在与这个做斗争。 成功运行的 curl 命令行输入如下:
curl -v -X POST --data "{\"dev_id\":\"a8610a3237397a01\",\"payload_raw\":\"Ag==\"}" https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/mkrwan1300a8610a3237397a01/sendvalvestatus?key=ttn-account-v2.lYA16-xxxxxxxxxxxxxxxxxxxxxx
我正在尝试在 PHP 中做同样的事情,以便能够在事物网络中执行到我的端点的下行链路。我正在尝试以下方法:
<?php
echo('hello');
$url = 'https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/mkrwan1300a8610a3237397a01/sendvalvestatus?key=ttn-account-v2.lYA16--xxxxxxxxxxxxxxxxxxxxxx';
$ch = curl_init($url);
// Setup request to send json via POST
$data = array(
'AQ=='
);
$payload = json_encode(array("payload_raw" => 'AQ=='));
// Attach encoded JSON string to the POST fields
curl_setopt($ch, CURLOPT_POSTFIELDS, $payload);
// Set the content type to application/json
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type:application/json'));
// Return response instead of outputting
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
// Execute the POST request
$result = curl_exec($ch);
$output=curl_exec($ch);
$info = curl_getinfo($ch);
echo "<pre>";
print_r($info);
echo "</pre>";
// Close cURL resource
curl_close($ch);
?>
我得到的结果是:
hello
Array
(
[url] => https://integrations.thethingsnetwork.org/ttn-eu/api/v2/down/mkrwan1300a8610a3237397a01/sendvalvestatus?key=ttn-account-v2.lYA16--xxxxxxxxxxxxxxxxxxxxxx
[content_type] => text/plain; charset=utf-8
[http_code] => 400
[header_size] => 171
[request_size] => 270
[filetime] => -1
[ssl_verify_result] => 0
[redirect_count] => 0
[total_time] => 0.203
[namelookup_time] => 1.0E-6
[connect_time] => 1.0E-6
[pretransfer_time] => 1.0E-6
[size_upload] => 22
[size_download] => 0
[speed_download] => 0
[speed_upload] => 108
[download_content_length] => 0
[upload_content_length] => 22
[starttransfer_time] => 0.203
[redirect_time] => 0
[redirect_url] =>
[primary_ip] => 13.69.184.129
[certinfo] => Array
(
)
[primary_port] => 443
[local_ip] => 10.0.0.109
[local_port] => 53234
)
所以它对我的数据不满意。我只是想在值的base64编码中发送一个payload_raw:'AQ==' 有什么想法吗? 谢谢 罗素
【问题讨论】:
-
我猜你忘记了 php 中的
dev_id字段。这就是为什么你会得到400http 响应 -
您可以尝试使用特殊工具,例如incarnate.github.io/curl-to-php。此资源会将您的 curl 请求转换为 php 中的完全等效
-
不确定这是否重要,可能只是随机编辑差异导致您的凭据模糊不清。但是您的 CLI 行在 X 之前只包含一个“-”,而您的 PHP 包含“--”。
-
是的,可能是我输入破折号的随机编辑。