其他人已经问过如何从 perl、java、bash 等执行此操作,但我需要在 PHP 中执行此操作,而且我没有看到任何已经问过的专门与 PHP 有关(或有答案)的问题.
我的代码:
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $fields);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$result = curl_exec($ch);
这行不通。目标站点有 print_r($_GET); print_r($_POST);
,所以当我检查 $result
时,我应该能够看到正在发送的字段。但是,$_POST 数组是空的——我只看到 get 变量。如果我从 $url 中删除 ?...
查询字符串,则 POST 数组将被正确填充。但是现在我没有 GET 参数。我该怎么做?
我的具体情况是,我需要发送太多数据以适应查询字符串,但我不能将其全部作为 POST 发送,因为我要提交到的站点正在为基于发布的数据选择一个处理程序在 GET 字符串中的变量上。我可以尝试更改它,但理想情况下我希望能够在同一个查询中发送获取和发布数据。
最佳答案
# GET query goes in the URL you're hitting
$ch = curl_init('http://example.com/script.php?query=parameter');
# POST fields go here.
curl_setopt($ch, CURLOPT_POSTFIELDS, array('post' => 'parameter', 'values' => 'go here'));
如果执行 POST,PHP 本身不会决定忽略 GET 参数。无论使用哪种 http 动词加载页面,它都会填充 $_GET - 如果 URL 中有查询参数,它们将进入 $_GET。
如果你没有得到 $_POST 和 $_GET ,那么某些东西导致了重定向或以其他方式杀死了某些东西。例如您是否检查了 $_SERVER['REQUEST_METHOD']
以查看您的代码是否实际上作为 POST 运行?如果没有实际执行发布,则 PHP 不会填充 $_POST。您可能已经向服务器发送了一个帖子,但这并不意味着您的代码实际上将在 POST 机制下执行 - 例如一个 mod_rewrite 重定向。
由于您启用了 FOLLOW_REDIRECT,您只是假设在代码执行时您实际上收到了一条消息。
关于php - 如何使用 cURL 在 PHP 中同时使用 GET 和 POST 参数发出请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25646692/