【问题标题】:Send data to api发送数据到 api
【发布时间】:2021-07-21 16:33:12
【问题描述】:

我需要向 api 发送用户名和密码,但无法连接,我在邮递员中尝试过,很好,我需要发送这样的 json

Json

我有这个代码(抱歉是我第一次尝试向 api 发送数据)

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => 'http://192.168.0.2/apilocation',
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => '',
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => 'POST',
  CURLOPT_POSTFIELDS =>'{
   "username" : "oswaldo",
    "password" : "1"
}',
  CURLOPT_HTTPHEADER => array(
    'Content-Type: application/json'
  ),
));

$response = curl_exec($curl);
        curl_setopt($response, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($response, CURLOPT_RETURNTRANSFER, true);
curl_setopt($response, CURLOPT_RETURNTRANSFER, TRUE);
        curl_close($curl);


var_dump($response);

但是返回 false :(,请帮忙

【问题讨论】:

  • 您是否让邮递员为您生成 curl 代码?如果没有,请尝试该版本
  • 是的,此代码来自邮递员,但仍然无法正常工作:(
  • 返回 false 的究竟是什么?因为如果我没记错的话,你似乎并没有真正执行请求。 curl_exec 的调用在哪里?
  • 我添加了“$response = curl_exec($curl);”这一行,我忘了输入问题
  • 嗯,好的。我从下面的 cmets 中看到,您现在得到了来自服务器的包含一些 JSON 的响应。但是还有一个问题是吗?我猜您希望它包含访问令牌?

标签: php api curl


【解决方案1】:

我觉得数据应该是这样的

CURLOPT_POSTFIELDS => json_encode(array("username" => "", "password" => ""))

您也可以尝试添加此标题

'accept: application/json',

也许是一种更清洁的方式

$ch = curl_init("http://192.168.0.2/apilocation");
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode(array("username" => "", "password" => "")));
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array("Content-Type: application/json"));

$response = curl_exec($ch);
curl_close($ch);

var_dump($response);

【讨论】:

  • 关于编码的好点,但标头与发送的内容无关,我们不知道API是否返回JSON
  • 添加更改,但仍然返回false,api返回此“code”:0,“message”:“”,“data”:{“username”:null,“token”:“ ", "tokenExpiration": "2021-07-21T17:55:34.084195Z" }
  • 我编辑了我的答案,也许可以解决您的问题。请再检查一遍好吗?
  • 相同,仅在 var 转储中显示“bool(false)”
  • 好的,然后你用你的第一个代码块尝试这个命令 CURLOPT_SSL_VERIFYPEER => false
猜你喜欢
  • 1970-01-01
  • 2015-10-23
  • 2021-10-16
  • 2020-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-06-14
相关资源
最近更新 更多