【问题标题】:PHP Curl and APIPHP 卷曲和 API
【发布时间】:2017-02-13 18:40:20
【问题描述】:

也许这个问题之前已经回答过了,但是我测试了我在网上找到的所有东西,但无法让它工作...... 我必须用 PHP 形成这种请求。

  • 卷曲 X POST "https://page.com/login/CODE" \
  • H "接受:应用程序/json, text/*;q=0.2" \
  • H "AcceptCharset: utf8" \
  • H "AcceptEncoding: gzip, deflate" \
  • d '{"appCode": "CODE"}' \
  • --cacert cacert.pem \
  • --压缩

这是我的 php 代码:

$data = array('appCode'=>'CODE');
$data_json = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_CAINFO, "cacert.pem");
curl_setopt($curl, CURLOPT_HTTPHEADER, array('Content-Type: application/json'));
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_URL, URL_REQUEST);
curl_setopt($curl, CURLOPT_HEADER, FALSE);
curl_setopt($curl,CURLOPT_ENCODING , "");
    //curl_setopt($ch, CURLOPT_POST, 1);
    //curl_setopt($curl, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($curl, CURLOPT_POSTFIELDS, $data_json);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);

如果我从 API 得到正确答案,它应该是一个 JSON 数组,另外按摩登录错误。

不知道这是什么文本/*;q=0.2",有什么建议我做错了吗?

如果有人需要帮助我的代码:

$data = array('appCode'=>'CODE');
$data_json = json_encode($data);
$curl = curl_init();
curl_setopt($curl, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($curl, CURLOPT_CAINFO, "cacert.pem");
curl_setopt_array($curl, array(
    CURLOPT_URL => "https://login.com/CODE",
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_ENCODING => "",
    CURLOPT_MAXREDIRS => 10,
    CURLOPT_TIMEOUT => 30,
    CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
    CURLOPT_CUSTOMREQUEST => "POST",
   CURLOPT_POSTFIELDS => $data_json,
   CURLOPT_HTTPHEADER => array('cache-control: no-cache'),
));

$response = curl_exec($curl);
$err = curl_error($curl);

curl_close($curl);

if ($err) {
    echo "cURL Error #:" . $err;
} else {
   echo $response;
}

最终我发现出了什么问题。

我在 pdf 文件中获得了所有手册。 我正在从 pdf 复制标题信息并将其粘贴到 Sublime 当我像这样复制和粘贴标题信息时 内容类型:application/json

在 sublime 上,它通常用破折号 (-) 显示,但是当我用记事本 ++ 等其他软件打开时,它显示没有破折号。 内容类型:application/json

这就是我的代码不起作用的问题:)

【问题讨论】:

  • text/*;q=0.2" 被称为媒体类型质量因子,用于为文件分配优先级,在这种情况下,纯文本在 0 到 1 范围内的优先级为 0.2
  • 这可能是它不起作用的原因吗?
  • 不,您没有设置 curl 所需的所有选项

标签: php json api curl


【解决方案1】:

我知道这种 curl “翻译”的绝妙技巧
您可以下载 Postman here,然后像往常一样执行您的请求
更多关于邮递员here
完成请求构建后,您只需转到代码(在右上角,保存下方)-> 并选择您喜欢的语言。在你的情况下 PHP 卷曲。之后,您可以将该代码复制到您的 curl 请求中。
它将如下所示:

编辑: 如果您在“代码”中选择 cUrl 选项,这就是它的外观。

【讨论】:

  • 问题是我必须从我的服务器上做,因为API的访问只能从服务器IP完成。
  • 我已经添加了编辑,所以你可以看到它的样子。
  • 非常感谢你,非常感谢 :) 该死的我得到了那个数组你我的英雄
【解决方案2】:

如果你需要一个 POST 请求,这个选项应该取消注释

curl_setopt($ch, CURLOPT_POST, 1);

【讨论】:

  • 不,不是这个 :) 我已经尝试过了,并把它注释掉。事实并非如此。 CURLOPT_POSTFIELDS 这也应该发送帖子标题...
猜你喜欢
  • 2015-03-25
  • 2012-12-31
  • 1970-01-01
  • 1970-01-01
  • 2018-05-02
  • 2011-05-21
相关资源
最近更新 更多