为何php curl post模式发送数据速度变慢了?我来说说原因

事例:

今天要向一台服务器上传文件,原版是curl的get模式,现在改用了post模式,按照原本的思想,代码如下

 1 <?php
 2 $post[‘c‘] = ‘config‘;
 3 $post[‘t‘] = ‘show‘;
 4 $post[‘o‘] = ‘xml‘;
 5 $post[‘ssid‘] = ‘%07o%B4%88O%EE%0Ca%07%DA%D8i%D36HE%AF%28%BC%3C%BE%D5s%DFv%A6%D83%D9%3E%16%96U%B4q%BA%0A%9A%DE%F0%BFJjh%DF2%FF%D2‘;
 6
 7
 8 $curl = curl_init();
 9 curl_setopt($curl, CURLOPT_URL,"http://172.16.59.130:28099/cgi-bin/japi.cgi");
10 curl_setopt($curl, CURLOPT_POST, true);
11 curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
12 curl_setopt($curl, CURLOPT_ENCODING, "gzip");
13 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
14 Accept-Encoding: gzip,deflate,sdch");
15
16 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
17 curl_setopt($curl, CURLINFO_HEADER_OUT, true);
18 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
19 $contents = curl_exec($curl);
20 curl_close($curl);
21 echo $contents;
22 ?>

但是耗时总是在2s左右,而用get模式则是很快,刚开始怀疑是服务器的问题,但是抱着试试看的态度,查了下curl  post有什么特殊的地方,这还真发现了。

在php curl post模式上,启用时会发送一个常规的POST请求,类型为:application/x-www-form-urlencoded,就像表单提交的一样。

如果把要post的数组转换成字符串,像get那种url,速度就上来了

 1 <?php
 2 $post[‘c‘] = ‘config‘;
 3 $post[‘t‘] = ‘show‘;
 4 $post[‘o‘] = ‘xml‘;
 5
 6 $post = http_build_query($post);
 7 $post .= "&ssid=%07o%B4%88O%EE%0Ca%07%DA%D8i%D36HE%AF%28%BC%3C%BE%D5s%DFv%A6%D83%D9%3E%16%96U%B4q%BA%0A%9A%DE%F0%BFJjh%DF2%FF%D2";
 8
 9 $curl = curl_init();
10 curl_setopt($curl, CURLOPT_URL,"http://172.16.59.130:28099/cgi-bin/japi.cgi");
11 curl_setopt($curl, CURLOPT_POST, true);
12 curl_setopt($curl, CURLOPT_POSTFIELDS, $post);
13 curl_setopt($curl, CURLOPT_ENCODING, "gzip");
14 curl_setopt($curl, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.111 Safari/537.36
15 Accept-Encoding: gzip,deflate,sdch");
16
17 curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
18 curl_setopt($curl, CURLINFO_HEADER_OUT, true);
19 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, false);
20 $contents = curl_exec($curl);
21 curl_close($curl);
22 echo $contents;
23 ?>
时间: 2024-10-18 08:09:26

为何php curl post模式发送数据速度变慢了?我来说说原因的相关文章

uip UDP 服务器广播模式(客户端可以任意端口,并且主动向客户端发送数据)

目前移植uip,发现UDP 服务器模式下,必须指定本地端口以及客户端端口,否则只能讲客户端端口设置为0,才能接收任意端口的数据,但是无法发送数据,因为此时客户端端口设置为0了,我通过将原始数据包中的客户端端口保存下来,并且在发送的时候将客户端端口替换为指定的端口,发送完成之后又设置为0,这样就实现了向任意客户端端口发送数据. uip.c if(uip_udp_conn->lport != 0 && UDPBUF->destport == uip_udp_conn->lpo

uip UDP server广播模式(client能够随意port,而且主动向client发送数据)

眼下移植uip,发现UDP server模式下,必须指定本地port以及clientport,否则仅仅能讲clientport设置为0,才干接收随意port的数据,可是无法发送数据,由于此时clientport设置为0了,我通过将原始数据包中的clientport保存下来,而且在发送的时候将clientport替换为指定的port,发送完毕之后又设置为0,这样就实现了向随意clientport发送数据. uip.c if(uip_udp_conn->lport != 0 && UDP

Quartz定时向阿里云MQ发送数据(TCP模式)

针对公司业务逻辑,向阿里云MQ发送指定数据,消费端根据数据来做具体的业务,分两个项目,一个生产端(Producer).一个消费端(Consumer) 生产端通过定时任务执行sql向阿里云MQ发送数据,消费端消费指定Topic上的数据 1:定时任务列表: 2:生产端表结构: aliasName:定时任务别名: cronExpression:定时任务轮询规则: jobGroup:定时任务分组: jobName:定时任务名称: jobTrigger:定时任务触发器: packageUrl:定时任务扫描

C#串口通信—向串口发送数据,同步接收返回数据

最近写C#串口通信程序,系统是B/S架构.SerialPort类有一个DataReceived事件,用来接收串口返回的数据,但这种方式在C/S架构下很好用,但B/S就不好处理了.所以写了一个同步模式接收返回数据的方法,不使用DataReceived事件.经过测试,可以正常使用(不支持多线程调用). 一.Machine类 1.Machine类有一个静态变量,定义如下: private static SerialPort serialPort = null; 2.向串口发送数据,同步接收返回数据的方

winpcap 发送数据包

第一:打开VS2010,创建一个新的项目,再对VS做一些设置.如下: 项目-->**属性(alt+F7)配置属性-->清单工具-->输入和输出-->嵌入清单-->否 项目-->**属性(alt+F7)配置属性-->C/C++-->常规-->附加包含目录--> 项目-->**属性(alt+F7)配置属性-->链接器-->常规-->附加库目录--> 项目-->**属性(alt+F7)配置属性-->链接器--&

Sftp和ftp 区别、工作原理等(服务器被动就是被动模式,PORT模式建立数据传输通道是由服务器端发起的,在PASV模式中,数据传输的通道的建立是由FTP客户端发起的)good

Sftp和ftp over ssh2的区别 最近使用SecureFx,涉及了两个不同的安全文件传输协议: -sftp -ftp over SSH2 这两种协议是不同的.sftp是ssh内含的协议,只要sshd服务器启动了,它就可用,它本身不需要ftp服务器启动.ftp over SSH2则象一个二传手. 1.SFTP的工作模式: 图1显示了SFTP的工作模式,它是作为SSH2的一个子服务工作的. 图 1 SFTP工作模式 2.FTP over SSH2 此协议还是基于ftp协议的.在此协议中SS

发送数据包

#include "stdafx.h" #include <stdlib.h>#include <stdio.h> #include <pcap.h> void main(int argc, char **argv){pcap_t *fp;char errbuf[PCAP_ERRBUF_SIZE];u_char packet[100];int i;pcap_if_t *alldevs;pcap_if_t *d;int inum;int j=0; /*

http_post_data发送数据的获取方式

private function http_get_data($url){ $ch = curl_init($url) ; curl_setopt($ch, CURLOPT_RETURNTRANSFER, true) ; // 获取数据返回 curl_setopt($ch, CURLOPT_BINARYTRANSFER, true) ; // 在启用 CURLOPT_RETURNTRANSFER 时候将获取数据返回 $data = curl_exec($ch) ; if (curl_errno(

服务器向客户端发送数据自动中断

问题现象: 客户端接收服务器端数据出现假死现象. 环境描述: 1.      客户端是window程序 2.      服务器端是Linux程序 3.      服务器端程序和客户端程序采用TCP进行通讯 问题分析: 1.      首先,客户端上进行抓包,对其数据包进行分析,发现服务器端发送的数据总是不完全 2.      其次,服务器上进行抓包,发现发送一会儿后,发送端的TCP窗口满了,导致数据溢出,发送的数据都是错误的数据包 3.      从服务器上的数据包分析发现,由于客户端处理速度过