[英]How to get HTTP response in a php request
我有一个cron file
,运行将图像发布到Instagram ,一旦图像发布,代码更新MySQL表成功。 有时,如果登录到Instagram不成功(或)IP阻止,则服务器响应显示("status":"fail")
。 如何使用(if)读取http响应然后更新MySQL失败?
PHP版本:5.6.35
服务器http响应:
{“message”:“checkpoint_required”,“checkpoint_url”:“ https://i.instagram.com/challenge/8633340132/qz34BIU1MQ/ ”,“lock”:true,“status”:“fail”,“error_type”: “checkpoint_challenge_required”}
当前发布代码:
<?php
require_once("helper/functions.php");
require_once("cron_insta_include.php");
$result_outmsg = $database->query("SELECT * FROM insta_sent");
while($row_outmsg = $database->fetch_array($result_outmsg))
{
if($row_outmsg["report"] == "Scheduled")
{
$res_ch = $database->query("SELECT * FROM insta_ch WHERE serial='" . $row_outmsg["fromch"] . "'");
$row_ch = $database->fetch_array($res_ch);
if(($row_ch["status"] != "Blocked") && ($row_ch != false))
{
if((time() - $row_ch["last_used"]) > 7200)
{
try
{
//Insta Sending
$cap = "." . "\r\n\r\n" . $row_outmsg["body"] . "\r\n\r\n" . "." . "\r\n\r\n" . $row_outmsg["hash"] . "\r\n\r\n" . "." . "\r\n\r\n" . $row_outmsg["tonum"] . "\r\n\r\n" . "." . "\r\n\r\n" . time();
$obj = new InstagramUpload();
$obj->Login($row_ch["phone"], $row_ch["ch_id"]);
$obj->UploadPhoto($row_outmsg["img_lnk"], $cap);
sleep(1);
$database->query("UPDATE insta_sent SET report='Sent' WHERE serial='" . $row_outmsg["serial"] . "'");
}
catch(Exception $e)
{
$database->query("UPDATE insta_sent SET report='Failed' WHERE serial='" . $row_outmsg["serial"] . "'");
}
$sql_13 = "UPDATE insta_ch SET last_used='" . time() . "' WHERE serial='" . $row_outmsg["fromch"] . "'";
$database->query($sql_13);
}
}
else
{
//$database->query("UPDATE insta_sent SET report='Not Sent' WHERE serial='" . $row_outmsg["serial"] . "'");
}
}
}
?>
您既可以直接使用curl来获取http响应,也可以使用像guzzle http这样的库。 请参考guzzle http doc:http: //docs.guzzlephp.org/en/stable/
样本卷曲请求是这样的:
$ch = curl_init($api_url);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, "your_data_array");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'Content-Type: application/json',
'Content-Length: "length_of_your_data_array"')
);
$result = curl_exec($ch);
$obj = new InstagramUpload();
$output = $obj->Login($row_ch["phone"], $row_ch["ch_id"]);
$resp = json_decode($output, true);
if($resp['status'] !='fail') {
$obj->UploadPhoto($row_outmsg["img_lnk"], $cap);
$database->query("UPDATE insta_sent SET report='Sent' WHERE serial='" . $row_outmsg["serial"] . "'");
}
正如marv255指出的那样,使用的类只打印结果而不返回它。 幸运的是,还有适用于此类场景的PHP函数。 只需使用输出缓冲。
ob_start();
$instance = new InstagramUpload();
$instance->Login($phone, $chid);
$instance->UploadPhoto($image, $caption);
$response = ob_get_contents();
ob_end_clean();
$result = json_decode($response);
if (!$result) {
// json string could not be decoded
}
if (property_exists($result, 'status') && $result->status == 'fail') {
// negative response
} else {
// positive response
}
$response
变量现在包含从API返回的字符串。 在这种情况下,您可以解析收到的字符串,如果fail
,您知道请求已失败,您可以将其保存在数据库中。
我已经更新了cron文件,如下所示,仍然无法更新MySQL upone failer
<?php
require_once("helper/functions.php");
require_once("cron_insta_include.php");
$result_outmsg = $database->query("SELECT * FROM insta_sent");
while($row_outmsg = $database->fetch_array($result_outmsg))
{
if($row_outmsg["report"] == "Scheduled")
{
$res_ch = $database->query("SELECT * FROM insta_ch WHERE serial='" . $row_outmsg["fromch"] . "'");
$row_ch = $database->fetch_array($res_ch);
//if(($row_ch["status"] != "Blocked") && ($row_ch != false))
if($row_ch["status"] == "Active")
{
if((time() - $row_ch["last_used"]) > 10800)
{
try
{
//Insta Sending
$cap = "." . "\r\n\r\n" . $row_outmsg["body"] . "\r\n\r\n" . "." . "\r\n\r\n" . $row_outmsg["hash"] . "\r\n\r\n" . "." . "\r\n\r\n" . $row_outmsg["tonum"] . "\r\n\r\n" . "." . "\r\n\r\n" . time();
$obj = new InstagramUpload();
$obj->Login($row_ch["phone"], $row_ch["ch_id"]);
sleep(2);
$obj->UploadPhoto($row_outmsg["img_lnk"], $cap);
sleep(2);
$database->query("UPDATE insta_sent SET report='Sent' WHERE serial='" . $row_outmsg["serial"] . "'");
}
catch(Exception $e)
{
$database->query("UPDATE insta_sent SET report='Failed' WHERE serial='" . $row_outmsg["serial"] . "'");
}
$sql_13 = "UPDATE insta_ch SET last_used='" . time() . "' WHERE serial='" . $row_outmsg["fromch"] . "'";
$database->query($sql_13);
}
}
else
{
$database->query("UPDATE insta_sent SET report='Not Sent' WHERE serial='" . $row_outmsg["serial"] . "'");
}
}
}
?>
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.