php - 如何使用 cURL 在 PHP 中同时使用 GET 和 POST 参数发出请求?

标签 php post curl get

其他人已经问过如何从 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/

相关文章:

php - 从 Javascript 函数调用带有 MySQL 查询的 PHP 页面,然后将结果返回到另一个 javascript 函数

ajax - JQuery.Ajax POST 请求到 Azure 返回错误请求

java - 如何将 @WebMvcTest 用于单元测试 POST 方法?

php - 400 - Curl 中的错误请求

node.js - 解码特殊西里尔字母

php - 如何对单个表中的多行进行分组并获取给定范围内的所有记录

php - MAMP 和 PHP “SSL operation failed with code 1”

php - laravel 无法根据价格对记录进行排序

Java:从后端向不同网站发送POST请求

javascript - 如何在jquery url中给参数值