繁体   English   中英

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

[英]How can I make a request with both GET and POST parameters in PHP with cURL?

其他人已经问过如何从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); print_r($_GET); print_r($_POST); ,所以当我检查$result我应该能够看到正在发送的字段。 但是,$ _POST数组为空 - 我只看到get变量。 如果我从$ url中删除?...查询字符串,则会正确填充POST数组。 但现在我没有GET参数。 我该怎么做呢?

我的具体情况是,我需要发送太多数据以使其适合查询字符串,但我无法将其作为POST发送,因为我要提交的网站是根据变量选择发布数据的处理程序在GET字符串中。 我可以尝试将其更改,但理想情况下,我希望能够在同一查询中发送get和post数据。

# 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,因此您只需确定在代码执行时实际收到帖子。

我不知道你可能已经有了但是你的$ url有所需的get参数吗? 喜欢:

$url = "http://example.com/index.php?param1=value1&param2=value2";

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM