在轰鸣声中,你可以看到我试图通过他们的JSON格式的API从网站下载一些数据。
我的问题是,当我尝试以json格式(25 MB的文本数据)获取数据时,php脚本会向我发送200响应(您可以在下面看到)。但奇怪的是,脚本实际完成执行,我的浏览器将响应作为文件下载。
如果输入到浏览器中的网址会返回正确的数据,即使通过wget,我也可以从此网址下载内容。
卷曲会从服务器传递到我的浏览器吗?
$ch = curl_init("https://example.com/api/json/view/view_name?authtoken=xxxyyyaaaa&raw=true");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec ($ch);
下载文件“myscriptname.php”,其中包含:
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>200 OK</title>
</head><body>
<h1>OK</h1>
<p>The server is temporarily unable to service your
request due to maintenance downtime or capacity
problems. Please try again later.</p>
</body></html>
答案 0 :(得分:1)
这就是您实际使用的cURL optin CURLOPT_RETURNTRANSFER用于:将传输的内容返回给用户代理。
答案 1 :(得分:0)
您的请求没问题,但是服务器将内容作为html页面返回(可能是他们的API无效),因此您将维护页面作为回复。 看着php.net
CURLOPT_RETURNTRANSFER TRUE
to return the transfer as a string of the return value of curl_exec()
instead of outputting it out directly.
当我使用curl
时 <?php
$ch = curl_init("http://localhost/testjson.php");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
$data = curl_exec ($ch);
print_r($data);
?>
我在exec之后得到的是
{"result":["google","stack","facebook"]}
(这是因为我使用print_r($ data);)
打印结果testjson.php是
<?php
$data = array ('result'=>array('google','stack','facebook'));
header('content-type:application/json');
echo json_encode($data);
?>