0

次のスニペットでは、JSON 形式の API を介して Web サイトからデータをダウンロードしようとしていることがわかります。

私の問題は、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>
4

2 に答える 2

1

これは、実際に使用している cURL optin CURLOPT_RETURNTRANSFER の目的です: 転送されたコンテンツをユーザー エージェントに返すためです。

于 2012-09-28T10:54:10.590 に答える
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. 

カールを使って

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

?>
于 2012-09-28T11:00:58.953 に答える