【发布时间】:2018-10-01 20:26:01
【问题描述】:
我尝试做的基本工作是多次访问一个 API 以下载许多音频文件。
我的想法是我有一个名为“download_audio”的函数。这个函数是一个 cURL,适用于我给它的任何单数 ID。但是,当我将相同的函数放入循环 ID 的 foreach 循环中时,它将工作一次,然后停止。我很好奇它为什么会停止,以及如何解决这个问题。
值得注意的是,这是一个安全服务器,它要求我在访问它之前获得一个令牌,这就是“JWTtoken”的含义。否则我的代码如下所示:
function download_audio($JWTtoken, $contactId)
{
$format = "wav";
$userArray = array();
$curl = curl_init();
curl_setopt_array($curl, array(
CURLOPT_URL => "https://MYURL/" . $contactId . "/" . $format,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_CAINFO => "../cacert.pem",
CURLOPT_TIMEOUT => 15,
CURLOPT_SSL_VERIFYPEER => 1,
CURLOPT_SSL_VERIFYHOST => 2,
CURLOPT_SSLVERSION => 6,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => array(
"content-type: audio/" . $format, $JWTtoken,
"Content-Description: File Transfer",
"Content-Type: audio/" . $format,
"Content-Disposition: attachment; filename=" . $contactId . "." . $format,
"Content-Transfer-Encoding: binary",
"Expires: 0",
"Cache-Control: must-revalidate",
"Pragma: public"
)));
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err)
{
return "cURL Error #:" . $err;
}
else
{
header("Content-type: application/octet-stream");
header("Content-Disposition: attachment; filename=" . $contactId . "." . $format);
echo $response;
return 1;
}
}
【问题讨论】:
-
你把循环放在哪里 - 在上面的函数中还是在调用这个函数的东西中?
-
我在循环中调用这个函数。类似于: foreach( $myarray as $key => $item) { 一些从数组 $DLaudio = download_audio($JWTtoken, $id) } 中获取我的 ID 的逻辑
-
您发送的所有标头都是响应标头,而不是请求标头。
-
您将响应作为下载发送到客户端。但您一次只能发送一个下载。
-
您是否受到 api 的速率限制?
标签: php curl ziparchive