【问题标题】:API working well on POSTMAN but giving error in Curl PHPAPI 在 POSTMAN 上运行良好,但在 Curl PHP 中出现错误
【发布时间】:2021-01-18 11:54:32
【问题描述】:

我正在尝试从 api 获取记录。它在邮递员上正常工作,但是当我在 php 中使用 curl 时出现错误。

这是我的 PHP 代码:

    function GETAPISRecord(){
    $curl = curl_init();
    curl_setopt_array($curl, array(
        CURLOPT_URL => https://data.medicare.gov/resource/6jpm-sxkc.json?$where=provider_number in("017000","017037","017055","017056","017116","017319","017324"),
        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(
            "Content-Type: application/json",
            "cache-control: no-cache",
        ),
    ));
    $response = curl_exec($curl);
    if($debug){
        // dd($url);
        dd($response);
    }
    return json_decode($response, true);

}

这是我在 curl 后遇到的错误: error after curl option

在 Postman 上,它按预期给出了完美的结果: postman result

此外,api url 工作完美,没有任何搜索参数。如果我们使用像 zipcode filter 这样的 zip_code 过滤器也可以正常工作,唯一的问题是 $where=provider_number in("017000","017037","017055","017056","017116", "017319","017324")

如果有人知道如何在 Laravel 中解决这个问题,他也可以回答这个问题。

编辑:添加邮递员中的卷曲标题 curl 7 headers

【问题讨论】:

  • 不要发布文字图片
  • 邮递员请求显示您为请求设置了 7 个标头,在 curl 中您只设置了 2 个,其他 5 个是什么?如果您显示邮递员的所有请求详细信息的屏幕截图可能会有所帮助
  • 只是一个猜测,但也许你需要像CURLOPT_URL => urlencode ( 'https://data.medicare.gov/resource/6jpm-sxkc.json?$where=provider_number in("017000","017037","017055","017056","017116","017319","017324")')这样对url进行编码
  • @WesleySmith 刚刚添加了这 7 个标题,您可以查看一下。

标签: php laravel api curl php-curl


【解决方案1】:

由于我提供的网址,我遇到了问题。我应该避免空格并用 curl api 中的 %20 和逗号 (") 替换为 %22

网址应该是这样的:https://data.medicare.gov/resource/6jpm-sxkc.json?$where=provider_number%20in(%22017000%22,%22017037%22,%22017055%22,%22017056%22,%22017116%22,%22017319%22,%22017324%22)

以 php 方式,我的 curl 将是这样的:

    <?php

$curl = curl_init();

curl_setopt_array($curl, array(
  CURLOPT_URL => "https://data.medicare.gov/resource/6jpm-sxkc.json?$where=provider_number%20in(%22017000%22,%22017037%22,%22017055%22,%22017056%22,%22017116%22,%22017319%22,%22017324%22)",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_ENCODING => "",
  CURLOPT_MAXREDIRS => 10,
  CURLOPT_TIMEOUT => 0,
  CURLOPT_FOLLOWLOCATION => true,
  CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => array(
    "Cookie: _frontend_session=Sld3TFdrNEFIWmpJRnV4a2JveHpDc3F3T3dHd1lpak5idzByL1VVTHNQSEpSU2hlNEZxRDlPbjd1cG1TNzVyaVRERzg4ZGNDYkZCV1h3TXBlNWE3a1JRWnU0dTN3R2dMa3JST0xObVhjM2ZoMGlJZk5MN211Qkxtb3ErSmZ6OGVPZFBwc2tJVDJwQXRwQllrVXloQUFBPT0tLThZeHZZYk9SL3IzMUU3aU16RUordXc9PQ%3D%3D--e3eb18669fa6c2e905a40ffff0c33b559e0e241b; ak_bmsc=745EECBD67F7301E4B7311809DFAE6DC68788BC621610000997F775F7DEE2B48~plyfmyJzyR+AfIF/Np8ucZmQIrMNlYOCjSqJWkFlzOJaVhe+8AtA+XDOYdtvT0/tRLH+xgXE8bRjqc+SfoLVQ+1/26CLzz6LKnTKHrki68a5GB42zBY1YR2CaW/pyJyyK/2ByXsuKfPYfRj94udk+L1LAX0ksKnKIvcYURkPjwo8gMJpTaPb7l6IbBxAQWX2S6izEKTsaKo+ZlUHLKmMG60anU3k1DvNs50YhrvgppYUc=; bm_sv=3283155D1D2681C3CB7F831A5C8E51EB~tPx4bluLNUcZLdNKSDT9178Ehspi63N1nZIElfhOt/SoHh97ihVROaVGwOseGzU3yfYzOhRmau/0Zde2PJAx5OISYkav8uPzxD1biUDX7vPYDFQXPlcbyz3Q0XoWQjfhS0FLXxnkkw5RMUQ+3ZwnxbIAyVGL/eebL6R8LE3wT/8="
  ),
));

$response = curl_exec($curl);

curl_close($curl);
echo $response;

祝你好运

【讨论】:

猜你喜欢
  • 2020-05-21
  • 1970-01-01
  • 2020-02-17
  • 2020-07-02
  • 1970-01-01
  • 2017-02-03
  • 2017-12-27
  • 2020-03-05
  • 1970-01-01
相关资源
最近更新 更多