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

php cURL错误:在URL中发现非法字符,php,api,curl,Php,Api,Curl,您好,我在从名为healthsos的API检索数据时遇到问题 我要走了 卷曲错误:在URL中找到非法字符 这里我想使用PHP获取数据这里是文档: 我尝试过以下代码: <?php $curl = curl_init(); curl_setopt_array($curl, array( CURLOPT_URL => "http://www.healthos.co /api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENS

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

我要走了

卷曲错误:在URL中找到非法字符

这里我想使用
PHP
获取数据这里是文档:

我尝试过以下代码:

<?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;
}    
客户机密:

faf4ad2651a7906fee8fab4c682ecc2721e16cc05771d8b32c807050ff621972
eb6731289c24359adcc76a98ed643de0b6f48526a4d56071d9c9cdb3656c3a9a
访问令牌:
12B57090D786EBF07C85496F5D2A7212FCA81799C93379C43066206B6780885


请参阅文档

从URL中删除新行

改变

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


URL不正确,请按以下方式更改URL

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

CURLOPT_URL => "http://www.healthos.com/api/v1/autocomplete/medicines/brands/CROCIN 125 MG SUSPENSION",
试试这个
  • 我添加了
    urlencode()
    ,以保持url的完整性
  • 我从原始url中删除了新行
我的PHP 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>';

我没有看到任何变化,原来的有什么问题?@EaB你在
www.healthos.co
之后有了新行请参考他们的文档:为什么你告诉了它无效的url<代码>www.healthos.co有效。并且您建议的URL无效。您的代码似乎正在工作,因为在仪表板中有对
crocin..
的请求。当我尝试时,我得到了一个空白屏幕,没有任何错误。为什么?是你自己管理的吗?没有其他代码?您可能需要在PHP中显示错误并启用错误报告来解决这个问题。什么版本的PHP?你有卷曲功能吗?另外,我进行了错误检查,因为我只是想让它工作。有可能API没有响应,或者因为来自世界各地的请求而禁止了您。我不知道。事实上,它对我来说仍然运行良好。我在一台Ubuntu 14.04机器上,使用PHP5.5.9。我会去我的PHP7机器那里检查一下。谢谢@Brain Gottier,谢谢你的努力,因为你的代码得到了一些理解。再次感谢你的欢迎。顺便说一句,我现在在一台使用PHP7的机器上,它在这里也工作得很好。
$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;
}    
<?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
        )

)