【发布时间】:2021-01-29 15:43:01
【问题描述】:
我正在寻找在循环内调用 API 的任何最佳和最快的方法,例如下面是我当前的代码,但我认为这不是好方法,因为这样 API 被调用了 100 次,因为它在php循环。无论如何我可以在外面使用它吗?但问题是我必须传递一些仅在循环中的唯一值。
$sql_q = sqlsrv_query($mssql, "SELECT * FROM Table WHERE Club='123'");
while($sql_f = sqlsrv_fetch_array($sql_q)){
/ Calling API TO Check Status
$auth = curl_init();
curl_setopt_array($auth, array(
CURLOPT_URL => "http://api.checkstatus.com/apiurl",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 0,
CURLOPT_FOLLOWLOCATION => true,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS =>"<soap:Envelope xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\r\n <soap:Body>\r\n <CheckStatus xmlns=\"http://apiurl.info/\">\r\n <UserID>".$ql_f['ID']."</UserID>\r\n </CheckStatus >\r\n </soap:Body>\r\n</soap:Envelope>",
CURLOPT_HTTPHEADER => array(
"Content-Type: text/xml"
),
));
$authres = curl_exec($auth);
curl_close($auth);
}
【问题讨论】:
-
为什么要提交这么多?它可能会在某个时候拒绝您的请求。
-
你确定
while($sql_f = sqlsrv_fetch_array($sql_q)){ -
这取决于 API 支持什么。如果你的 API 只支持这种参数化,我看不出有什么办法可以发送大量请求。
-
while 循环运行良好,即使 API 也运行良好,但我担心的是加载速度,我很确定这是因为我在循环内调用 API。如果我错了,请纠正我。
-
通常 API 具有某种过滤功能,我的建议是检查您正在使用的 API 的文档,并通过 1 个请求或几个请求(使用偏移量,页或其他)...如果您从数据库中获得 2000 条记录怎么办?您将向 API 发出 2000 个请求?这似乎根本不对
标签: php loops curl while-loop