繁体   English   中英

带有curl的PHP脚本返回200响应

[英]PHP script with curl returns 200 response

在下面的代码片段中,您可以看到我正在尝试通过其API以JSON格式从网站下载一些数据。

我的问题是,当我尝试获取json格式的数据(25 mb文本数据)时,php脚本向我发送了200响应(您可以在下面看到)。 但是奇怪的是,脚本实际上已经完成执行,并且响应被我的浏览器下载为文件。

如果将URL输入到浏览器中,则返回正确的数据,即使通过wget我也可以从该URL下载内容。

可能是curl会通过服务器中的驻留位置传递到我的浏览器吗?

$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>

嗯,这就是您实际使用的cURL optin CURLOPT_RETURNTRANSFER的作用:将传输的内容返回给用户代理。

您的请求还可以,但是服务器将内容作为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. 

当我用卷发

 <?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);
?>

我在执行后得到的是

{"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);

?>

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM