我从usaspending.gov抓取数据时遇到错误,我无法弄清楚原因。我已经检查过我的php设置都是打开的,甚至还设置了另一个随机网站的测试网页。
我采取了另一个步骤来包含方法和useragent的选项。
我怀疑它已超时,但如果不是这样,我不知道还有什么可以尝试让它发挥作用。我尝试的每个其他网址,我都没有问题。如果有人有任何建议,我很乐意阅读它们!
这是我的示例代码。
$opts = array(
'http'=>array(
'method'=>"GET",
'user_agent'=>"Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8",
'timeout'=>60
)
);
$context = stream_context_create($opts);
$test = file_get_contents('http://www.usaspending.gov/fpds/fpds.php?state=MI&detail=c&fiscal_year=2013',false,$context);
我还要补充一点,我用fopen,file_get_contents和simplexml_load_file尝试了这个,没有运气。我已经尝试了fopen和file_get_contents的扩展选项,没有变化。我确定我错过了一些小东西,只是无法弄清楚它是什么。
编辑:这是错误消息
Warning: file_get_contents(http://www.usaspending.gov/fpds/fpds.php?state=MI&detail=c&fiscal_year=2013) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in...
此外,链接工作正在尝试打开,如果您将其复制/粘贴到浏览器中,则应该下载。
答案 0 :(得分:1)
在我的头撞到同一堵墙一段时间后,我使用卷曲方法(How to get the real URL after file_get_contents if redirection happens?)找到基本API网址重定向的位置,现在似乎正在运作!
而不是使用以下内容获取相同的错误消息:
file_get_contents(http://www.usaspending.gov/fpds/fpds.php?detail=c&fiscal_year=2013&state=AL&max_records=1000&records_from=0)
现在正在为我工作:
file_get_contents(http://www.usaspending.gov/api/fpds_api_complete.php?fiscal_year=2013&vendor_state=AL&Contracts=c&sortby=OBLIGATED_AMOUNT%2Bdesc&records_from=0&max_records=20&sortby=OBLIGATED_AMOUNT+desc)
因此,使用此作为我的基本URL来访问API时添加了更多参数(使用“Contracts”参数替换原始的“detail”参数):
我希望这会有所帮助,也适合你!