簡體   English   中英

如何在php請求中獲取HTTP響應

[英]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"] . "'");
        }
    }
}

?>

HTTP請求成功“;否則回顯”
HTTP請求不成功!“;?>

您既可以直接使用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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM