【问题标题】:PHP script with curl returns 200 response带有 curl 的 PHP 脚本返回 200 响应
【发布时间】:2012-09-28 19:24:57
【问题描述】:

在下面的片段中,您可以看到我正在尝试通过其 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>

【问题讨论】:

  • 您尝试过更改用户代理吗?
  • 服务器忽略用户代理,数据已下载,但在下载之前,我的浏览器下载了 html 响应并认为一切都已完成
  • 也许你可以摆弄一下Accept HTTP 标头,看看是否有任何改变。

标签: php curl


【解决方案1】:

这就是您实际使用的 cURL 选项 CURLOPT_RETURNTRANSFER 的用途:将传输的内容返回给用户代理。

【讨论】:

  • 但如果我理解正确,当CURLOPT_RETURNTRANSFER 设置为false curl 将打印出接收到的数据。如果设置为 true,它将以字符串形式返回数据。问题是我不想打印数据,只需将其保存到文件中
  • 你是对的,对不起,我的错。我确实记得大约 4 年前摆弄过同样的问题。我让它工作,我只是不记得目前的原因是什么。对不起!
【解决方案2】:

您的请求正常,但服务器将内容作为 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);

?>

【讨论】:

  • 查看设置为application\json的响应类型...:/
猜你喜欢
  • 2016-06-05
  • 1970-01-01
  • 2015-05-09
  • 1970-01-01
  • 2017-11-25
  • 2015-01-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多