我想回应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的代码有什么错误
答案 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()!