Запрос REST API в PHP - ошибка запроса - PullRequest
0 голосов
/ 27 мая 2018

Я делаю запрос к API, используя его веб-сервис post.rest.Я построил запрос, используя Почтальон.Я получаю сообщение об ошибке: «Требуется параметр« запрос », и он должен иметь значение».Я пытался решить это в течение нескольких дней, и я нахожусь в своем уме.Я думал, что смогу решить это сам, но не увенчался успехом.Кажется, я пробовал по крайней мере сотню различных перестановок кода.

Вот мой PHP-код для запроса:

     <?php
     $curl = curl_init();

     curl_setopt_array($curl, array(
     CURLOPT_URL => "https://SDMDataAccess.sc.egov.usda.gov/Tabular/post.rest",
     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 = array("query" => "SELECT l.areasymbol, l.areaname, l.lkey, 
          musym, muname, museq, mu.mukey
          FROM sacatalog sac 
          INNER JOIN legend l ON l.areasymbol = sac.areasymbol 
          AND l.areatypename = 'Non-MLRA Soil Survey Area' 
          INNER JOIN mapunit mu ON mu.lkey = l.lkey 
          AND mu.mukey IN (455997) 
          ", "FORMAT" => "JSON"),
     CURLOPT_HTTPHEADER => array(
        "Cache-Control: no-cache",
        "Content-Type: application/json",
        "Postman-Token: 520636bc-a062-4ab8-99e7-7edaae5118b4"
      ),
    ));

    file_put_contents('soil_request.txt', $data);
    $response = curl_exec($curl);

    $err = curl_error($curl);

    curl_close($curl);

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

Я не могу найти ни одного примера кодаза отправку запросов на отдых этой службе API в их документации или где-либо еще в Интернете, хотя их документация обширна.

Заранее благодарим вас за внимание к этому вопросу.Я действительно ценю это.

1 Ответ

0 голосов
/ 27 мая 2018

С https://en.1answer.info/676973-7a313939383734 похоже, вам может потребоваться изменить массив данных в строку json перед отправкой

Кроме того, ваша строка

CURLOPT_POSTFIELDS=>$data=array("select ....

не так.

Вместо этого определите свой массив данных, а затем создайте из него строку http-запроса.Кроме того, имена параметров чувствительны к регистру, поэтому вы хотите использовать query вместо QUERY и format вместо FORMAT.

Рабочий код -

 <?php

    $data["query"]="SELECT l.areasymbol, l.areaname, l.lkey,
          musym, muname, museq, mu.mukey
          FROM sacatalog sac
          INNER JOIN legend l ON l.areasymbol = sac.areasymbol
          AND l.areatypename = 'Non-MLRA Soil Survey Area'
          INNER JOIN mapunit mu ON mu.lkey = l.lkey
          AND mu.mukey IN (455997)";

     $data["format"] = "JSON";

     $curl = curl_init();

     curl_setopt_array($curl, array(
     CURLOPT_URL => "https://SDMDataAccess.sc.egov.usda.gov/Tabular/post.rest",
     CURLOPT_RETURNTRANSFER => true,
     CURLOPT_ENCODING => "",
     CURLOPT_MAXREDIRS => 10,
     CURLOPT_TIMEOUT => 30,
     CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
     CURLOPT_CUSTOMREQUEST => "POST",
     CURLOPT_POSTFIELDS => http_build_query($data),
     CURLOPT_HTTPHEADER => array(
        "Cache-Control: no-cache",
        "Content-Type: application/json",
        "Postman-Token: 520636bc-a062-4ab8-99e7-7edaae5118b4"
      ),
    ));

    file_put_contents('soil_request.txt', $data);
    $response = curl_exec($curl);

    $err = curl_error($curl);

    curl_close($curl);

if ($err) {
  echo "cURL Error #:" . $err;
} else {
  echo $response;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...