将JSON响应存储在php中的变量中

时间:2019-01-24 06:05:34

标签: php

我正在尝试使用以下代码使用php发送json请求并将响应存储在变量中

 $hmaps_request = "https://geocoder.api.here.com/6.2/geocode.json?app_id=xxx&app_code=yyy&searchtext=3891 Delwood Drive, Powell, OH, United States";
 $json = file_get_contents($hmaps_request);
 $details = json_decode($json, TRUE);

我没有得到任何错误以及任何回应。但是,如果我将网址粘贴到浏览器中,则可以得到json响应。

3 个答案:

答案 0 :(得分:2)

检测您的问题

如果您读取const checked = [2, 3], /* array holding all checked values */ arr = [{id: 1}, {id: 2}], res = arr.map(({id}) => checked.includes(id) ? {id, unChecked: false} : {id}); console.log(res);数组(由file_get_contents()调用生成),则会发现您收到了“ 400 Bad Request”响应,因此一无所获。因此,您的URL一定有问题。

经过简要检查,我认为可能是您的$http_response_header参数阻止了您。首先,有效的URL查询通常不会包含空格。可能是为什么API服务器说您是“错误请求”。

通常,您需要正确地转义URL查询字符串以具有正确的URL。现代浏览器非常擅长为您无缝,自动地进行翻译,因此直接在浏览器中使用URL可能不会出现此问题。

解决方案

让我们对该理论进行检验。我们将使用http_build_query()来转义您的查询查询参数:

(出于隐私原因,已修改参数。请替换查询变量)

"searchtext"

我现在似乎已经得到正确的解码响应。自己尝试。

答案 1 :(得分:1)

您的请求URL发生错误更改请求URL


来自

$hmaps_request = "https://geocoder.api.here.com/6.2/geocode.json?app_id=NT2iR8TD1kAeCxERIow8&app_code=-r9pZGDuz6G5NWToLaCSUQ&searchtext=3891 Delwood Drive, Powell, OH, United States";

收件人

 $hmaps_request = "https://geocoder.api.here.com/6.2/geocode.json?app_id=NT2iR8TD1kAeCxERIow8&app_code=-r9pZGDuz6G5NWToLaCSUQ&searchtext=3891+Delwood+Drive+Powell+OH+United+States";

这是完整的代码

 $hmaps_request = "https://geocoder.api.here.com/6.2/geocode.json?app_id=NT2iR8TD1kAeCxERIow8&app_code=-r9pZGDuz6G5NWToLaCSUQ&searchtext=3891+Delwood+Drive+Powell+OH+United+States";
 $json = file_get_contents($hmaps_request);
 $details = json_decode($json, TRUE);
 print_r($details);

答案 2 :(得分:1)

我认为您的请求网址中存在错误。请检查以下代码。

$url = "https://geocoder.api.here.com/6.2/geocode.json?app_id=NT2iR8TD1kAeCxERIow8&app_code=-r9pZGDuz6G5NWToLaCSUQ&searchtext=3891 Delwood Drive, Powell, OH, United States";
$url = str_replace(" ","%20",$url);
$json = @file_get_contents($url);
$details = json_decode($json, TRUE);
print_r($details);