[英]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.