Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Increase CURL speed php

Tags:

php

curl

I am using an API provided by flipkart.com, this allows me to search and get results output as json.

The code I am using is:

$snapword = $_GET['p'];
$snapword = str_replace(' ','+',$snapword);

$headers = array(
           'Fk-Affiliate-Id: myaffid',
           'Fk-Affiliate-Token: c0f74c4esometokesndad68f50666'
           );
$pattern = "@\(.*?\)@";
$snapword = preg_replace($pattern,'',$snapword);
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,  'https://affiliate-api.flipkart.net/affiliate/search/json?query='.$snapword.'&resultCount=5');
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
curl_setopt($ch, CURLOPT_ENCODING , "gzip");
curl_setopt($ch, CURLOPT_USERAGENT,'php');
curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
$snapdeal = curl_exec($ch);
curl_close($ch);
$time_end = microtime(true);
$time = $time_end - $time_start;
echo "Process Time: {$time}";

and the time it is taking is : Process Time: 5.3794288635254

Which is way too much, any ideas on how to reduce this?

like image 511
IdidntKnewIt Avatar asked Nov 10 '22 13:11

IdidntKnewIt


1 Answers

Use curl_getinfo() to retrieve more accurate information. It also shows how much time spent resolving DNS etc.

You can see exact times taken for each step with the following keys:

CURLINFO_TOTAL_TIME - Total transaction time in seconds for last transfer
CURLINFO_NAMELOOKUP_TIME - Time in seconds until name resolving was complete
CURLINFO_CONNECT_TIME - Time in seconds it took to establish the connection
CURLINFO_PRETRANSFER_TIME - Time in seconds from start until just before file transfer begins
CURLINFO_STARTTRANSFER_TIME - Time in seconds until the first byte is about to be transferred
CURLINFO_SPEED_DOWNLOAD - Average download speed
CURLINFO_SPEED_UPLOAD - Average upload speed


$info = curl_getinfo($curl);
echo $info['connect_time']; // Same as above, but lower letters without CURLINFO

Most probably, the API is slow.

You could try to change to a faster DNS server (in Linux: /etc/resolv.conf).

Other than that, not much you can do.

like image 63
Daniel W. Avatar answered Nov 15 '22 07:11

Daniel W.