雅虎财经:404 响应代码 (PHP)
Yahoo Finance: 404 response code (PHP)
我正在使用 PHP 根据一组股票代码从 Yahoo Finance 获取 CSV 文件。
我的代码很简单,如下:
$file = 'http://ichart.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv';
$handle = fopen($file, "r");
//Then use fgetcsv to grab data,
fclose($handle);
我收到以下错误:
Warning: fopen(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in y.php on line x
手动输入前面的URL(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv)获取CSV文件没有问题,所以我很困惑为什么我会收到404响应代码。
编辑:
我在使用 fopen 之前添加了一个 cURL 请求。这是为了检查 404 响应代码。我没有从 cURL 收到任何 404 响应代码,但仍然收到与上述相同的错误。
$curlhandle = curl_init($file);
curl_setopt($curlhandle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($curlhandle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($curlhandle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
echo "404:".$this->symbol."<br>";
curl_close($curlhandle);
return null;
break;
} else {
curl_close($curlhandle);
$handle = fopen($file, "r");
}
您需要 URL 对所有参数进行编码,否则您可能会得到无效的 URL...
$file = 'http://ichart.yahoo.com/table.csv?s='.urlencode($this->symbol).'&a='.urlencode($a).' //etc
尝试将 ichart.yahoo.com
更改为 ichart.finance.yahoo.com
。即
file = 'http://ichart.finance.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv';
$handle = fopen($file, "r");
//Then use fgetcsv to grab data,
fclose($handle);
我正在使用 PHP 根据一组股票代码从 Yahoo Finance 获取 CSV 文件。
我的代码很简单,如下:
$file = 'http://ichart.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv';
$handle = fopen($file, "r");
//Then use fgetcsv to grab data,
fclose($handle);
我收到以下错误:
Warning: fopen(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv): failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found in y.php on line x
手动输入前面的URL(http://ichart.yahoo.com/table.csv?s=ANA.L&a=2&b=16&c=2016&d=2&e=19&f=2016&g=d&q=q&y=0&z=ANA.L&x=.csv)获取CSV文件没有问题,所以我很困惑为什么我会收到404响应代码。
编辑: 我在使用 fopen 之前添加了一个 cURL 请求。这是为了检查 404 响应代码。我没有从 cURL 收到任何 404 响应代码,但仍然收到与上述相同的错误。
$curlhandle = curl_init($file);
curl_setopt($curlhandle, CURLOPT_RETURNTRANSFER, TRUE);
/* Get the HTML or whatever is linked in $url. */
$response = curl_exec($curlhandle);
/* Check for 404 (file not found). */
$httpCode = curl_getinfo($curlhandle, CURLINFO_HTTP_CODE);
if($httpCode == 404) {
echo "404:".$this->symbol."<br>";
curl_close($curlhandle);
return null;
break;
} else {
curl_close($curlhandle);
$handle = fopen($file, "r");
}
您需要 URL 对所有参数进行编码,否则您可能会得到无效的 URL...
$file = 'http://ichart.yahoo.com/table.csv?s='.urlencode($this->symbol).'&a='.urlencode($a).' //etc
尝试将 ichart.yahoo.com
更改为 ichart.finance.yahoo.com
。即
file = 'http://ichart.finance.yahoo.com/table.csv?s='.$this->symbol.'&a='.$a.'&b='.$b.'&c='.$c.'&d='.$d.'&e='.$e.'&f='.$f.'&g='.$g.'&q=q&y=0&z='.$this->symbol.'&x=.csv';
$handle = fopen($file, "r");
//Then use fgetcsv to grab data,
fclose($handle);