最新消息:文章中包含代码时,请遵守代码高亮规范!

curl 模拟POST方法 发送数据

PHP Charlie 59109浏览 6评论

用POST方法发送数据
当发起GET请求时,数据可以通过“查询字串”(query string)传递给一个URL。例如,在google中搜索时,搜索关键即为URL的查询字串的一部分:
http://www.google.com/search?q=nettuts
这种情况下你可能并不需要cURL来模拟。把这个URL丢给“file_get_contents()”就能得到相同结果。 
不过有一些HTML表单是用POST方法提交的。这种表单提交时,数据是通过 HTTP请求体(request body) 发送,而不是查询字串。例如,当使用CodeIgniter论坛的表单,无论你输入什么关键字,总是被POST到如下页面:
http://codeigniter.com/forums/do_search/


你可以用PHP脚本来模拟这种URL请求。首先,新建一个可以接受并显示POST数据的文件,我们给它命名为post_output.php:


<?php

print_r($_POST);


接下来,写一段PHP脚本来执行cURL请求:

以下为引用的内容:

<?php
$url = "http://localhost/post_output.php";

$post_data = array (
    "foo" => "bar",
    "query" => "Nettuts",
    "action" => "Submit"
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);  //时候将获取数据返回

// 我们在POST数据哦!
curl_setopt($ch, CURLOPT_POST, 1); //设置为POST传输

// 把post的变量加上
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data); //post过去数据

$output = curl_exec($ch);

if($output === false){  //判断错误
   echo curl_error($ch);
}

$info = curl_getinfo($ch);  //能够在cURL执行后获取这一请求的有关信息
curl_close($ch);
echo $output;

执行代码后应该会得到以下结果:

<?php
array
(
    ['foo'] => bar
     ['query'] => Nettuts
     ['action'] => Submit
)

 

这段脚本发送一个POST请求给 post_output.php ,这个页面 $_POST 变量并返回,我们利用cURL捕捉了这个输出。

转载时请注明出处及相应链接,本文永久地址:http://blog.it985.com/598.html


pay_weixin
pay_weixin
微信打赏
pay_weixin
支付宝打赏
感谢您对作者charlie的打赏,我们会更加努力!    如果您想成为作者,请点我

您必须 登录 才能发表评论!

网友最新评论 (6)

  1. Hey there! This post couldn’t be written any better! Reading this post reminds me of my good old room mate! He always kept talking about this. I will forward this write-up to him. Fairly certain he will have a good read. Thank you for sharing!
    Naomi2014-07-26 05:28
  2. This content is extremely good, I acquired the concept!
    Kylie2014-07-28 06:09
  3. I sort of disagree with the main concept but yet can not have a finger on it. You want to see it in so many different ways to be certain.
    Annabelle2014-07-28 16:07
  4. Thanks a lot for the blog post.Much thanks again. Cool.
    Melanie2014-08-13 18:14