【问题标题】:How should I format a curl for a HTTP request in PHP?我应该如何在 PHP 中为 HTTP 请求格式化 curl?
【发布时间】:2017-03-01 19:30:29
【问题描述】:

我知道有一个由个人 (https://github.com/tgallice/wit-php) 创建的库。但是,我找不到他是如何格式化卷曲的。我只想做一个请求,所以使用他的库会是大材小用。

这是在终端中工作的字符串,但我不确定如何用 PHP 编写:curl -H 'Authorization: Bearer ACCESSCODE' 'https://api.wit.ai/message?v=20160526&q=mycarisbroken'

$ch1 = curl_init();
curl_setopt($ch1, CURLOPT_URL,"https://api.wit.ai/message?v=20160526&q=my%20car%20doesnt%20work");
curl_setopt($ch1, CURLOPT_POST, 1);
// curl_setopt($ch1, CURLOPT_POSTFIELDS,$vars);  //Post Fields
curl_setopt($ch1, CURLOPT_RETURNTRANSFER, true);

$headers = [
    'Authorization: Bearer ACCESSCODEOMITTED',
];

curl_setopt($ch1, CURLOPT_HTTPHEADER, $headers);
curl_setopt($ch1, CURLOPT_HEADER, true);
curl_setopt($ch1, CURLOPT_FOLLOWLOCATION, false);
$server_output = curl_exec ($ch1);
curl_close($ch1);
Data::$answer = json_decode($server_output)['entities']['intent'][0]['value'];

【问题讨论】:

  • 签出libcurl
  • @HassanAhmed 我不知道 -H 是什么,所以这个链接没有多大帮助
  • curl 中的 -H 标志代表您发送到服务器的标头
  • @HassanAhmed 我仍然无法正确处理,不确定这是 GET 还是 POST。标题会卷曲到哪里?
  • 默认 curl 命令请求类型是 GET ,只要你没有定义为 POST

标签: php curl wit.ai


【解决方案1】:

您提供的命令行将向远程服务器发送一个 GET - 但在您的代码中您发送一个 POST。注释掉 curl_setopt($ch1, CURLOPT_POST, 1);,您的 PHP 代码将完全按照命令行执行。

【讨论】:

    【解决方案2】:

    您可以尝试使用这个 PHP 库 https://github.com/php-curl-class/php-curl-class。基本上它将所有 php curl 函数包装到类中。之后您可以轻松创建实现的模拟并编写体面的单元测试。

    您的代码应如下所示:

    <?php 
    $curl = new Curl();
    $curl->setHeader('Authorization', 'Bearer ACCESSCODEOMITTED');
    $curl->get('htps://api.wit.ai/message?v=20160526&q=mycarisbroken');
    
    if ($curl->error) {
      echo 'Error: ' . $curl->errorCode . ': ' . $curl->errorMessage . "\n";
    } else {
      echo 'Response:' . "\n";
      var_dump($curl->response);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-11-07
      • 1970-01-01
      • 2010-11-25
      • 1970-01-01
      • 2017-08-03
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多