【发布时间】:2016-06-10 07:32:53
【问题描述】:
我用 PHP 写了一个小脚本来向 web 服务器发送一个 POST 请求:
<?php
$cid = file_get_contents('cid');
function httpPost($url)
{
$ch = curl_init();
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch,CURLOPT_POST, true);
$output=curl_exec($ch);
curl_close($ch);
return $output;
}
echo httpPost("http://172.17.0.1:2375/containers/$cid/stop?t=5");
?>
是的,这是 Docker。我正在使用remote API in Docker,这个小脚本有效! 但是,URL 末尾的 ?t=5 会被忽略。 我想这与 ? 有关。
如何正确格式化此 URL,以便 ?t=5 正常工作?
(到目前为止,我尝试了 1001 种方法,使用引号和双引号,但没有成功。花了 4 个多小时后,我认为 stackoverflow 可以提供帮助?)
谢谢...
注意:“cid”只是硬盘上的一个文件,用于存储容器 ID。所以我正在从文件中检索容器 ID,并将其传递给 URL(无论如何,这部分都有效)。 完整的网址是我写的,即未解析。
【问题讨论】:
-
你试过了吗?
$ch = curl_init($url);我不确定,但这可能会改变事情。 -
对 Docker 一无所知,因此这可能不适用于您的情况,但如果使用 mod_rewrite 解析 URL,您需要在 .htaccess 中添加选项 [QSA] 以传递获取参数跨度>
-
stop脚本是否期望t参数位于GET或POST数据中?将其放在?之后将其放入GET数据中。 -
好吧,这可以作为命令行工作:
curl -v --raw -X POST http://172.17.0.1:2375/containers/79dbbc471a4a/stop?t=5。所以我找到了一种让容器ID“动态”的方法。然后,我在网上寻找一种在 PHP 中构造正确 cURL 函数的方法。这就是我卡住的地方。 -
嘿晚礼服,更新了下面的答案。您缺少 CURLOPT_POSTFIELDS。