您的位置:首页 > 编程语言 > PHP开发

php 使用 curl 发送 post 数据

2015-03-26 20:31 537 查看
转载于:blog.sina.com.cn/s/blog_5fc7df450100q7ix.html

作为第三方开发商,经常会需要调用平台接口,远程调用,就要用到curl,其实质就是叫调用的方法与用到的参数以httppost的方式发送至平台服务器。

简单的例子:

$url = 'http://'; //调用接口的平台服务地址

$post_string =array('a'=>'b');

$ch = curl_init();

curl_setopt($ch, CURLOPT_URL, $url);

curl_setopt($ch, CURLOPT_POSTFIELDS, $post_string);

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);

curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 10);

curl_setopt($ch, CURLOPT_TIMEOUT, 30);

$result = curl_exec($ch);

curl_close($ch);

其实CURLOPT_POSTFIELDS的这个设置中,亦可以直接发送数组的,但是这样做的后果是严重增加的请求的时间,耗时大约在2秒多,同样的操作用socket方式操作则正常,在毫秒级别。

若将此处:curl_setopt($ch,CURLOPT_POSTFIELDS, $post_string);

修改为:curl_setopt($ch,CURLOPT_POSTFIELDS, http_build_query($post_data));

则执行时间恢复正常

PS:

http_build_query — 生成 URL-encode 之后的请求字符串

说明

string http_build_query ( array
$formdata [, string $numeric_prefix ] )
使用给出的关联(或下标)数组生成一个经过 URL-encode 的请求字符串。参数formdata 可以是数组或包含属性的对象。一个formdata数组可以是简单的一维结构,也可以是由数组组成的数组(其依次可以包含其它数组)。如果在基础数组中使用了数字下标同时给出了numeric_prefix参数,此参数值将会作为基础数组中的数字下标元素的前缀。这是为了让 PHP 或其它 CGI程序在稍后对数据进行解码时获取合法的变量名。

Note:


arg_separator.output 来分隔参数。

Example #1 [b]http_build_query() 使用示例[/b]

<?php

$data = array('foo'=>'bar',

'baz'=>'boom',

'cow'=>'milk',

'php'=>'hypertext processor'

);

echo http_build_query($data); // foo=bar&baz=boom&cow=milk&php=hypertext+processor

?>


Example #2 [b]http_build_query() 使用数字下标的元素[/b]

<?php

$data = array('foo', 'bar', 'baz', 'boom', 'cow' => 'milk', 'php' =>'hypertext processor');

echo http_build_query($data);

echo http_build_query($data, 'myvar_');

?>
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: