Я пытаюсь сделать запрос к API-интерфейсу Coinbase, как это
$url = "https://api.gdax.com/products/BTC-USD/candles?start=".date($format,$starting_date)."&end=".date($format,$ending_date)."&granularity=".$granularity;
а потом я передаю это в file_get_contents($url)
но это дает мне ошибку
file_get_contents (https://api.gdax.com/products/BTC-USD/candles?start=2015-05-07&end=2015-05-08&granularity=900
): не удалось открыть поток: ошибка HTTP-запроса! HTTP / 1.1 400 Bad Request.
Проблема, конечно, в том, когда&«превращается в»&».
Кажется, вам нужно определить пользовательский агент.
Попробуй это;
$url = "https://api.gdax.com/products/BTC-USD/candles?start=2015-05-07&end=2015-05-08&granularity=900";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch,CURLOPT_USERAGENT,"Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.13) Gecko/20080311 Firefox/2.0.0.13");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
curl_close($ch);
var_dump($result);
Если вы все еще настаиваете на использовании file_get_contents
тогда все еще можно использовать пользовательский агент;
$url = "https://api.gdax.com/products/BTC-USD/candles?start=2015-05-07&end=2015-05-08&granularity=900";
$options = array(
"http"=>array(
"header"=>"User-Agent: Mozilla/5.0 (iPad; U; CPU OS 3_2 like Mac OS X; en-us) AppleWebKit/531.21.10 (KHTML, like Gecko) Version/4.0.4 Mobile/7B334b Safari/531.21.102011-10-16 20:23:10\r\n" // i.e. An iPad
)
);
$context = stream_context_create($options);
$result = file_get_contents($url, false, $context);
var_dump($result);
Для получения дополнительной информации вы можете проверить file_get_contents а также stream_context_create (для использования заголовков) документация
Это может произойти, если один из отправляемых вами параметров не urlencode
д.
Когда php видит неверно сформированный URL (например, g: с пробелами или другими символами URL в черном списке), он выполняет полный запрос urlencode.
Попробуйте заменить двойные кавычки на одинарные. Это самый простой ответ из перечисленных здесь:
php file_get_contents и &усилитель;
Верхняя часть более вовлечена, но, вероятно, безопаснее.
Попробуйте:
$url = html_entity_decode($url);
file_get_contents($url);
Подробнее о html_entity_decode
ОБНОВЛЕНО
Попробуйте заменить
& with & in url as below
$url = "https://api.gdax.com/products/BTC-USD/candles?start=".date($format,$starting_date)."&end=".date($format,$ending_date)."&granularity=".$granularity;
Размещать это, потому что это работало лучше всего для меня. Я знаю, что это старый вопрос.
Я обнаружил, что при построении запроса с помощью http_build_query
проблема амперсанда ушла.
$url = 'https://example.url';
// http_build_query builds the query from an array
$query_array = array (
'search' => $string,
'from' => $from,
'to' => $to,
'format' => 'json'
);
$query = http_build_query($query_array);
$result = file_get_contents($url . '?' . $query);
edit: только что увидел ответ @joshi (на самом деле перешел по ссылке), и там используется http_build_query.
Вы можете вернуть htmlspecialchars, используя:
htmlspecialchars_decode();
попробуйте позвонить file_get_contents
вот так :
file_get_contents(htmlspecialchars_decode($url));