2014-09-03 129 views
5

其他人已经问过如何从perl,java,bash等等做到这一点,但我需要在PHP中做到这一点,并且我没有看到任何已经被问到的与PHP有关的具体问题。如何使用cURL在PHP中使用GET和POST参数提出请求?

我的代码:

$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字符串中的变量。我可以尝试改变,但理想情况下,我希望能够在同一查询中发送获取和发布数据。

+0

http://hayageek.com/php-curl-post-get/ – 2014-09-03 14:21:01

+1

你不能同时执行一个POST和一个GET,你可以添加一些查询字符串到你的url,但是要添加POST变量,你必须做一个POST。 – randomizer 2014-09-03 14:22:04

+0

@ParagTyagi是的,这是一个非常好的基础教程,但它不能解决我的问题 - 我怎样在同一时间发送GET和POST *? – Benubird 2014-09-03 14:22:18

回答

9
# 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')); 

PHP本身不会决定是否执行POST忽略GET参数。无论使用何种类型的http动词加载页面,它都会填充$ _GET - 如果URL中有查询参数,它们将进入$ _GET。

如果你没有得到$ _POST和$ _GET,那么有些东西会导致重定向或以其他方式杀死某些东西。例如你有没有检查$_SERVER['REQUEST_METHOD']以查看你的代码是否实际以POST方式运行?如果帖子未实际执行,PHP将不会填充$ _POST。您可能已将帖子发送到服务器,但这并不意味着您的代码实际上将在POST机制下执行 - 例如,一个mod_rewrite重定向。

由于您开启了FOLLOW_REDIRECT,因此您只是简单地假设您实际上在执行代码时获取了帖子。

+0

这就是我正在做的,但它*不起作用*!我错过了什么吗?有我需要的一些特殊的php.ini设置吗? – Benubird 2014-09-03 14:27:07

+0

@Benubird不,没有特别的设置。这是它的工作原理,如果它不适合你,应该发布你的实际代码。你的代码中没有任何地方显示你的URL。它绝对有效,所以你的网址必须不正确。 – Brad 2014-09-03 14:28:23

+0

@Brad这是我的网址:'https://ec2-54-225-37-120.compute-1.amazonaws.com/wordpress/?wc-api = paddle_wc_payment_gateway' – Benubird 2014-09-03 14:31:34

3

我不知道也许你已经有,但是你的$ url有所需的获取参数?像:

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

是的,它确实 - 就像我在问题中所说的那样,我可以看到帖子字段或获取字段,但不能同时看到两个字段。 – Benubird 2014-09-03 14:25:01

+0

这不回答这个问题。 – randomizer 2014-09-03 14:25:49

+0

@randomizer它不怎么样? – Brad 2014-09-03 14:26:06