【问题标题】:PHP curl only sending POST data oncePHP curl 只发送一次 POST 数据
【发布时间】:2016-03-25 17:11:03
【问题描述】:

我有以下 PHP 代码:

<?php

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL,            "https://10.0.0.99/api/login");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST,           1);
curl_setopt($ch, CURLOPT_POSTFIELDS,     "somethingsomething");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: text/plain',
    'Content-Length: 18')
);

$cookie = curl_exec($ch);

curl_setopt($ch, CURLOPT_URL,            "https://10.0.0.99/api/getcmds");
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIE, "cookie=".$cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST,           1);
curl_setopt($ch, CURLOPT_POSTFIELDS,     "");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: text/plain',
    'Content-Length: 0')
);

$response = curl_exec($ch);
$json = json_decode($response, true);

curl_setopt($ch, CURLOPT_URL,            "https://10.0.0.99/api/cmd/" . $json["value"]);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, false);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_COOKIE, "cookie=".$cookie);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_POST,           1);
curl_setopt($ch, CURLOPT_POSTFIELDS,     "on");
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Content-Type: text/plain',
    'Content-Length: 2')
);

curl_exec($ch);

curl_close($ch);

第一次调用 curl_exec 按预期发布字符串并返回响应。第二次调用也按预期工作。

然而,第三次调用不会将字符串“on”发布到服务器。它正确地获取了返回的数据(没有“on”是错误的),但服务器永远不会收到发布的数据。

代码本身在 PHP 5.5.30 的命令行中使用 -f 标志运行。 Curl Verbose 模式显示 Content-Length 设置正确,但它不显示任何有关已发布数据的信息。帖子的其余部分似乎是正确的,只是没有数据到达。

(PS:这不应该是生产代码,只是我正在玩的东西,所以请不要关于代码质量/安全性。)

【问题讨论】:

    标签: php post curl


    【解决方案1】:

    您可以尝试关闭连接,然后重新开始新的呼叫/请求。我个人做这件事。

    【讨论】:

      【解决方案2】:

      来自 cURL 上的 php.net 文档: PHP: curl_setop

      至于CURL_POSTFIELDS: 此参数可以作为 urlencoded 字符串(如 'para1=val1&para2=val2&...')或作为字段名称作为键和字段数据作为值的数组传递。

      在您的情况下,您设置了一个空变量$_POST['on']。如果你想让它有一些特殊的价值:

      curl_setopt($ch, CURLOPT_POST,           1);
      curl_setopt($ch, CURLOPT_POSTFIELDS,     "on=value");
      

      【讨论】:

      猜你喜欢
      • 2010-11-08
      • 2019-05-14
      • 2015-06-22
      • 2021-05-05
      • 2012-10-17
      • 2018-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多