【问题标题】:php cURL Error:Illegal characters found in URLphp cURL 错误:在 URL 中发现非法字符
【发布时间】:2017-08-30 05:53:19
【问题描述】:

您好,我在从名为 healthOsAPI 检索数据时遇到问题。

我来了

cURL 错误:在 URL 中发现非法字符

这里我想使用PHP 获取数据这里是文档:https://documenter.getpostman.com/view/2641261/healthos/6nATBN9#aa477f59-954c-744e-38dc-4e12a833fb70

我试过这个代码:

<?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "http://www.healthos.co
/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 30,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "authorization" => "12b570970d786ebf07c85496f5d2a7212fca81799c93379c43066206b6780885"
  ),
));

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

curl_close($curl);

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

这是我的 100% 真实凭据:

客户编号:

faf4ad2651a7906fee8fab4c682ecc2721e16cc05771d8b32c807050ff621972

客户端密码:

eb6731289c24359adcc76a98ed643de0b6f48526a4d56071d9c9cdb3656c3a9a

访问令牌: 12b570970d786ebf07c85496f5d2a7212fca81799c93379c43066206b6780885

请参考文档https://documenter.getpostman.com/view/2641261/healthos/6nATBN9#aa477f59-954c-744e-38dc-4e12a833fb70

【问题讨论】:

    标签: php api curl


    【解决方案1】:

    PHP 的 My HealthOS API 示例

    他们的 API 有示例代码,但不是 PHP 的,所以翻译成 PHP 只需要一些工作:

    <?php
    
    // POST Request Access Token 
    
    $fields = array(
        'grant_type' => "client_credentials",
        'client_id' => "faf4ad2651a7906fee8fab4c682ecc2721e16cc05771d8b32c807050ff621972",
        'client_secret' => "eb6731289c24359adcc76a98ed643de0b6f48526a4d56071d9c9cdb3656c3a9a",
        'scope' => "public read write"
    );
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => 'http://www.healthos.co/api/v1/oauth/token.json',
      CURLOPT_RETURNTRANSFER => TRUE,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_POSTFIELDS => json_encode($fields),
      CURLOPT_HTTPHEADER => array(
        "content-type: application/json"
      )
    ));
    
    $json_response = curl_exec($curl);
    
    curl_close($curl);
    
    $response = json_decode( $json_response, TRUE );
    $access_token = $response['access_token'];
    
    
    // GET Search Medicines
    
    $curl = curl_init();
    
    curl_setopt_array($curl, array(
      CURLOPT_URL => "http://www.healthos.co/api/v1/autocomplete/medicines/brands/" . urlencode('CROCIN 125 MG SUSPENSION'),
      CURLOPT_RETURNTRANSFER => TRUE,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTPHEADER => array(
        "authorization: Bearer " . $access_token
      )
    ));
    
    $json_response = curl_exec($curl);
    
    curl_close($curl);
    
    $response = json_decode( $json_response, TRUE );
    
    echo '<pre>';
    print_r( $response );
    echo '</pre>';
    

    请注意有两个请求,一个用于授权,另一个用于药物搜索。我得到了这些结果:

    Array
    (
        [0] => Array
            (
                [name] => CROCIN 125 MG SUSPENSION
                [form] => ML of suspension
                [standardUnits] => 1
                [packageForm] => bottle
                [price] => 37.77
                [size] => 60 ML suspension
                [manufacturer] => Glaxo SmithKline Pharmaceuticals Ltd
                [constituents] => Array
                    (
                        [0] => Array
                            (
                                [name] => Paracetamol
                                [strength] => 125 mg
                            )
    
                    )
    
                [schedule] => Array
                    (
                        [category] => OTC
                        [label] => It can be sold without a prescription
                    )
    
                [id] => 586ab09f91c126fe056b693f
                [medicine_id] => 63GIV
                [search_score] => 2.097369
            )
    
    )
    

    【讨论】:

    • 您的代码似乎可以正常工作,因为在仪表板中有对crocin.. 的请求。当我尝试时,我得到了没有任何错误的空白屏幕。为什么?
    • 你自己运行的吗?没有其他代码?您可能需要在 PHP 中显示错误并打开错误报告来解决这个问题。什么版本的PHP?你启用了 curl 吗?另外,我取出了错误检查,因为我只是想让它工作。 API 可能没有响应,或者由于来自世界各地的请求而禁止了您。我不知道。
    • 实际上,它对我来说仍然运行良好。我在 Ubuntu 14.04 机器上,使用 PHP 5.5.9。我会去我的 PHP 7 机器并在那里检查。
    • 感谢@Brain Gottier,感谢您的努力,因为您的代码得到了一些理解。再次感谢
    • 欢迎您。顺便说一句,我现在在一台装有 PHP 7 的机器上,它在这里也可以正常工作。
    【解决方案2】:

    试试这个

    • 我添加了urlencode() 以保持网址不变。
    • 我从原始网址中删除了新行。

    $curl = curl_init();
        $url = "http://www.healthos.com/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION";
        $endpoint = urlencode( $url );
    
    curl_setopt_array($curl, array(
     // CURLOPT_URL => "http://www.healthos.co/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
      CURLOPT_URL => $endpoint,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_ENCODING => "",
      CURLOPT_MAXREDIRS => 10,
      CURLOPT_TIMEOUT => 30,
      CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => array(
        "authorization" => "12b570970d786ebf07c85496f5d2a7212fca81799c93379c43066206b6780885"
      ),
    ));
    
    $response = curl_exec($curl);
    $err = curl_error($curl);
    
    curl_close($curl);
    
    if ($err) {
      echo "cURL Error:" . $err;
    } else {
      echo $response;
    }    
    

    【讨论】:

      【解决方案3】:

      从 URL 中删除新行。

      改变

      CURLOPT_URL => "http://www.healthos.co
      /api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
      

      CURLOPT_URL => "http://www.healthos.co/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
      

      【讨论】:

      • 我没有看到任何变化,原来的有什么问题?
      • @EaB 您在www.healthos.co 之后有新行删除该新行
      【解决方案4】:

      网址不正确,请改成以下网址

      www.healthos.co 不是有效的。更改为 www.healthos.com

      CURLOPT_URL => "http://www.healthos.com/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
      

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      • 2015-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多