2 JSON。只有1个工作。 json_decode php

时间:2017-07-26 20:15:57

标签: php json

我真的很白发了。

我想回应https://api.gdax.com/products/btc-usd/ticker/

的[ask]数据

但它返回null。

当我尝试使用几乎相同的json的另一个API时,它工作得很完美。

此示例有效

<?php 

$url = "https://api.bitfinex.com/v1/ticker/btcusd";
$json = json_decode(file_get_contents($url), true);
$ask = $json["ask"];
echo $ask;

此示例返回null

<?php 

$url = "https://api.gdax.com/products/btc-usd/ticker/";
$json = json_decode(file_get_contents($url), true);
$ask = $json["ask"];
echo $ask;

任何人都有一个很好的解释,返回null的代码有什么错误

2 个答案:

答案 0 :(得分:3)

该null结果的服务器阻止php代理连接,从而返回http 400错误。您需要为http请求指定user_agent值。

e.g。

$ua = 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36';
$options  = array('http' => array('user_agent' => $ua));
$context  = stream_context_create($options);

$url = "https://api.gdax.com/products/btc-usd/ticker/";
$json = json_decode(file_get_contents($url, false, $context), true);
$ask = $json["ask"];
echo $ask;

您还可以在$ua变量上使用任何user_agent字符串,只要您确保目标服务器允许它。

答案 1 :(得分:1)

您无法在不传递参数的情况下访问此网址。它发生在主机检查请求来自哪里时。

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@PreAuthorize("hasRole('ADMIN')")
public class HomeControllerTest {

    @Autowired
    private TestRestTemplate restTemplate;

    @Test
    @WithMockUser(username = "user", password = "test", roles = "ADMIN")
    public void home() throws Exception {
        String body = this.restTemplate.getForObject("/", String.class);
        assertThat(body).isEqualTo("Hello World!");
    }

}

然后你可以在$ result上使用json_decode()!