php file_get_contents($ url)&变成&

时间:2015-05-08 09:21:04

标签: php url file-get-contents url-encoding ampersand

我正在尝试向像这个

的coinbase api发出请求
foreach

然后我在$url = "https://api.gdax.com/products/BTC-USD/candles?start=".date($format,$starting_date)."&end=".date($format,$ending_date)."&granularity=".$granularity; 传递了它,但它给了我一个错误

file_get_contents(file_get_contents($url)):无法打开流:HTTP请求失败! HTTP / 1.1 400错误请求。

问题当然是'&'变成了'&'。

6 个答案:

答案 0 :(得分:3)

您似乎需要定义用户代理。 试试这个;

$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_contentsstream_context_create(使用标题)文档

答案 1 :(得分:1)

如果您发送的参数之一没有urlencode d,则会发生这种情况。

当php看到格式错误的url(例如,带有空格或其他列入黑名单的url)时,urlencode就是完整的请求。

答案 2 :(得分:0)

尝试:

$url = html_entity_decode($url);
file_get_contents($url);

有关html_entity_decode

的详细信息

<强>已更新

尝试替换

& with &amp; in url as below

$url = "https://api.gdax.com/products/BTC-USD/candles?start=".date($format,$starting_date)."&amp;end=".date($format,$ending_date)."&amp;granularity=".$granularity;

答案 3 :(得分:0)

尝试替换单引号的双引号。这是这里列出的最简单的答案:

php file_get_contents and &amp;

最重要的是更多参与,但可能是一个更安全的赌注。

答案 4 :(得分:0)

发布此信息是因为它最适合我。我知道这是一个老问题。

我发现在使用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);

编辑:刚刚看到@joshi的回答(实际上是在链接后面),并且在那里使用了http_build_query。

答案 5 :(得分:-1)

您可以使用以下命令恢复htmlspecialchars:

MenuPanel

尝试这样调用htmlspecialchars_decode();

file_get_contents