phpapacheapicurlbulksms

Request-URI Too Long - SMS API


My problem is somehow peculiar. I have this bulksms api from my provider:

http://www.estoresms.com/smsapi.php?username=user&password=1234&sender=@@sender@@&recipient=@@recipient@@&m
essage=@@message@@&

then i wrapped it in PHP and passed it in cURL:

$api = "http://www.estoresms.com/smsapi.php?username=".$sms_user."&password=".$sms_pwd."&sender=".$sender_id."&recipient=".$numbers."&message=".$text."&";

function curl_get_contents($url)
{   
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
$data = curl_exec($ch);
curl_close($ch);
return $data;
}
$send_it =  curl_get_contents($api);

ordinarily, it worked fine, but when $recepient (phone numbers) are more than say 300, i get an error:

Request-URI Too Long The requested URL's length exceeds the capacity limit for this server. Additionally, a 414 Request-URI Too Long error was encountered while trying to use an ErrorDocument to handle the request.

But BulkSMS should be able to send to thousands of numbers at a time. From my research, i found out that there's a limit to URL. I'm not the server owner. i working on a shared hosting plan. pls how can i get around this problem. I know there's a solution to it that would not mean buying my own server.

Thanks


Solution

  • So then, i had to find a way around my own problem. if the API will not allow thousands of numbers at a time, then let's break it into chunks at the point of execution.

        function curl_get_contents($url)
        {   
        $ch = curl_init($url);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
        curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
        curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
        $data = curl_exec($ch);
        curl_close($ch);
        return $data;
        }
    
        $how_many = count(explode(',',  $numbers));
        if ($how_many > 250){
        $swi = range(0, ceil($how_many/250)-1); 
        foreach ($swi as $sw){$numbers_a = implode(',', (array_slice(explode(',', $numbers), $sw*250, 250)));
        $api = "http://www.estoresms.com/smsapi.php?username=".$sms_user."&password=".$sms_pwd."&sender=".$sender_id."&recipient=".$numbers_a."&message=".$text."&";
    
    
        $send_it =  curl_get_contents($api);
        }
        }
    
    if ($how_many <= 250){
        $api = "http://www.estoresms.com/smsapi.php?username=".$sms_user."&password=".$sms_pwd."&sender=".$sender_id."&recipient=".$numbers."&message=".$text."&";
    $send_it =  curl_get_contents($api);    
    }