天天看点

curl

<code>简单的例子:</code>

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

<code>$post_string</code> <code>= </code><code>array</code><code>(</code><code>'a'</code><code>=&gt;</code><code>'b'</code><code>); </code>

<code> </code> 

<code>$ch</code> <code>= curl_init();</code>

<code>curl_setopt(</code><code>$ch</code><code>, CURLOPT_URL, </code><code>$url</code><code>);</code>

<code>curl_setopt(</code><code>$ch</code><code>, CURLOPT_POSTFIELDS, </code><code>$post_string</code><code>);</code>

<code>curl_setopt(</code><code>$ch</code><code>, CURLOPT_RETURNTRANSFER, true);</code>

<code>curl_setopt(</code><code>$ch</code><code>, CURLOPT_CONNECTTIMEOUT, 10);</code>

<code>curl_setopt(</code><code>$ch</code><code>, CURLOPT_TIMEOUT, 30);</code>

<code>$result</code> <code>= curl_exec(</code><code>$ch</code><code>); </code>

<code>curl_close(</code><code>$ch</code><code>);</code>

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

<code>   </code><code>若将此处:curl_setopt(</code><code>$ch</code><code>, CURLOPT_POSTFIELDS, </code><code>$post_string</code><code>);</code>

<code>   </code><code>修改为:curl_setopt(</code><code>$ch</code><code>, CURLOPT_POSTFIELDS, http_build_query(</code><code>$post_data</code><code>));</code>

<code>则执行时间恢复正常</code>

<code>PS:</code>

<code>http_build_query — 生成 URL-encode 之后的请求字符串</code>

<code>说明</code>

<code>string http_build_query ( </code><code>array</code> <code>$formdata</code> <code>[, string </code><code>$numeric_prefix</code> <code>] )</code>

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

<code>    </code><code>Note:</code>

<code>    </code><code>用 arg_separator.output 来分隔参数。</code>

<code>     </code> 

<code>Example #1 http_build_query() 使用示例</code>

<code>&lt;?php</code>

<code>$data</code> <code>= </code><code>array</code><code>(</code><code>'foo'</code><code>=&gt;</code><code>'bar'</code><code>,</code>

<code>              </code><code>'baz'</code><code>=&gt;</code><code>'boom'</code><code>,</code>

<code>              </code><code>'cow'</code><code>=&gt;</code><code>'milk'</code><code>,</code>

<code>              </code><code>'php'</code><code>=&gt;</code><code>'hypertext processor'</code>

<code>             </code><code>);</code>

<code>              </code> 

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

<code>?&gt;</code>

<code>Example #2 http_build_query() 使用数字下标的元素</code>

<code>$data</code> <code>= </code><code>array</code><code>(</code><code>'foo'</code><code>, </code><code>'bar'</code><code>, </code><code>'baz'</code><code>, </code><code>'boom'</code><code>, </code><code>'cow'</code> <code>=&gt; </code><code>'milk'</code><code>, </code><code>'php'</code> <code>=&gt;</code><code>'hypertext processor'</code><code>);</code>

<code>echo</code> <code>http_build_query(</code><code>$data</code><code>);</code>

<code>echo</code> <code>http_build_query(</code><code>$data</code><code>, </code><code>'myvar_'</code><code>);</code>