【问题标题】:One cURL does executing the other does一个 cURL 确实执行另一个
【发布时间】:2019-03-29 07:18:11
【问题描述】:

大家好,我正在处理 PHP、cURL 和 JSON 数据。

架构:

 FRONT <-> MIDDLE <-> BACK

问题位置:

  MIDDLE <-> BACK

说明:

在我的 MIDDLE 文件(PHP 服务器)中,我调用了一个函数,该函数使 cURL 成为我的 BACK 文件(PHP 服务器)。

我遇到的问题是它会执行其中一个调用(HTTP cURL 请求),但不会执行另一个调用,而忽略了第一个不执行的调用。

你们能指导我解决这个问题吗?我该如何解决这个问题?

我的尝试:

  • 我研究了有关 curl 的(文章、视频)信息,认为也许我必须像 mysql 一样处理它,如果我需要从同一服务器请求不同的项目,我必须创建多个 cURL 连接(返回)。
  • 我已经实现了虚拟打印输出以查看执行了什么,并得出了我在 description 部分中描述的结论。

注意:

您将在下面找到 MIDDLE、BACK 和两个图像的代码:

  • 图 1 是带有虚拟打印输出的代码,显示了一个 cURL 如何执行而另一个不执行。请注意文本“what back gets”
  • 图 2 是不执行 cURL 的方式。

中间文件:

注意: 看看在“EXAMSOLVED”的情况下我如何调用两个函数。这与图 1 有关。

如果我评论与图像 2 相关的第二个函数。

<?php

/*------------------------------------------------------------------*/

include "exam_grading_system.php";

/*------------------------------------------------------------------*/

function http_post_back_server($url, $data)
{
    $obj = curl_init();

    curl_setopt($obj, CURLOPT_URL, $url);
    curl_setopt($obj, CURLOPT_POST, strlen($data));
    curl_setopt($obj, CURLOPT_POSTFIELDS, $data);
    curl_setopt($obj, CURLOPT_RETURNTRANSFER, true);

    $ans = curl_exec($obj);

    curl_close($obj);

    return $ans;
}

//--------------------------------------------------------------------

function get_question_info($ulr, $id_question)
{
    //Set UP Request Packet
    $askDB->case = "GradingInfo";
    $askDB->id_question = $id_question;

    //Convert Packet to JSON format
    $askDB = json_encode($askDB);

    //echo $askDB;

    //Ask Back Server
    $BK_Srv_Ans = http_post_back_server($url,$askDB);

    return $BK_Srv_Ans;
}

//--------------------------------------------------------------------

/*URL TO BACK SERVER*/
$url_myserver = "https: MY URL ";

/*GLOBAL VARS*/
$back_ans ="";

/*RECEIVE DATA FROM POST REQUEST*/
$indata = file_get_contents("php://input");
$data = json_decode($indata,true);

/*MAKE REQUEST TO SERVERS*/
switch($data["case"]){
    case "_EXAMSOLVED_":
        $questions_Info = get_question_info($url_myserver, $data["id_question"]);
        //$indata = Grading($data, $questions_Info);
        //$back_ans = http_post_back_server($url_myserver,$indata);
        break;
    default:
        $back_ans = http_post_back_server($url_myserver,$indata);
        break;
}

/*ANSWER BACK TO FRON END*/
echo $back_ans;

?>

回档:

注意:查看我在请求文件时的虚拟回显语句

<?php

/*------------------------------------------------------------------*/
include "Prof_backend_tools.php";
include "Student_backend_tools.php";
/*------------------------------------------------------------------*/


echo "what back gets: ";

/*RECEIVING DATA FROM POST REQUEST */
$indata = file_get_contents("php://input");

/*DATA TO JSON OBJ*/
$indata = json_decode($indata, true);

/*CHECKING DATABASE CONNECTIVITY */

if(mysqli_connect_error())
{ echo "Connection Error: ".mysqli_connect_error; }

switch($indata["case"])
{
  case "_EXAMSOLVED_":
    echo store_exam_slutions($indata,DB_s());
    break;
  case "GradingInfo":
    echo "--IN BACK--";
    //echo Needed_data_for_grading($indata);
    break;
  default:
    echo "NADA";
    break;
}

?>

图片 1:

图 2:

任何向导都会是很棒的人。 谢谢。

【问题讨论】:

  • _EXAMSOLVED_ 的代码块中,您将结果分配给$question_info,但您没有对结果执行任何其他操作,这是正确的吗?
  • @Ferrybig,是的,到目前为止,我只想处理 cURL 未执行的原因。如果您注意到下面的行中被注释掉了,我将调用变量 $question_info。但到目前为止,如果 cURL 没有执行,它不会做任何事情。
  • 安迪,你在描述问题方面做得非常出色。然而,这种方法是有缺陷的:你应该从它周围所有不必要的东西中提取minimal reproducible example,而不是描述它和它出现的上下文。然后在这里发布这段代码。通常,您会在自己执行此操作时发现错误。

标签: php json curl php-curl


【解决方案1】:

好的,我找到了发生了什么!!!

调试:

  • 检查MIDDLE文件。
  • 检查函数定义中的参数get_question_info
  • 现在检查提供给函数调用的参数 http_post_back_server
  • 这就是问题所在。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2011-03-17
    • 1970-01-01
    相关资源
    最近更新 更多