使用CURL发布JSON,然后转到发布的页面

时间:2011-11-05 17:11:29

标签: php json curl

我有一组php处理页面通过get传递数据进行交互,但现在我必须在几个处理页面之间传递JSON,并且需要与使用GET时相同的功能。

当前工作的get方法:

//The guts

header("Location: $moreprocessing_url/?userid=$id");

exit();

然后在moreprocessing_url中选择:

$userid = $_GET[id];

//More guts

$something = 'important';

header("Location: $public_url/?something=$something");

exit();

所以现在在第一个处理页面中,我不需要发送简单的字符串,而是需要发送JSON - 所以我使用CURL发布JSON - 但是在帖子之后我想要发布的页面继续处理并使原始页面停止。与上述代码的工作方式相同,但使用CURL / post。也许我对CURL的理解不够强,这是不可能的?

我的CURL:

$curl = curl_init($moreprocessing_url);
curl_setopt($curl, CURLOPT_HEADER, false);
curl_setopt($curl, CURLOPT_RETURNTRANSFER, false);
curl_setopt($curl, CURLOPT_HTTPHEADER,
array("Content-type: application/json"));
curl_setopt($curl, CURLOPT_POST, true);
curl_setopt($curl, CURLOPT_POSTFIELDS, $data);

curl_exec($curl);
curl_close($curl);

exit();

所以这会返回到发生CURL的当前页面而不是我想要的moreprocessing_url - 这可能吗?基本上我希望页面被发布,接管和发送CURL的页面停止。

1 个答案:

答案 0 :(得分:0)

我相信你正在尝试这样做:

  1. 浏览器要求 guts.php
  2. guts.php 将JSON编码数据发布到 more-guts.php
  3. more-guts.php 处理发布的JSON并返回 301移动暂时响应;新位置 public.php?something = important
  4. guts.php 收到此回复并将其转发至浏览器
  5. 浏览器遵循重定向
  6. 如果这是真的,那么你需要对你的cURL脚本进行一些调整。这些方面的东西:

    $curl = curl_init("url.php"); // the URL that processes your POST
    
    curl_setopt($curl, CURLOPT_POST, true); // use POST method
    curl_setopt($curl, CURLOPT_HTTPHEADER, array("Content-type: application/json")); // set POST header
    curl_setopt($curl, CURLOPT_POSTFIELDS, $data); // set POST body
    
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); // send output to a variable for processing
    curl_setopt($curl, CURLOPT_HEADER, true); // set to true if you want headers in the output
    curl_setopt($ch, CURLOPT_NOBODY, true); // set to true if you do not want the body
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, false); // set to false if you want to see what redirect header was sent
    
    $output = curl_exec($curl);
    curl_close($curl);
    
    var_dump($output);
    

    根据CURLOPT_HEADERCURLOPT_NOBODY使用的值,$output变量将包含响应标题,正文或两者(它们由两个空行分隔)。如果您需要标题中的内容,可以使用正则表达式提取所需的标题并将其发送到浏览器。

    如果您选择这样做,您可以回复身体。