2017-07-11 4 views
0

Mein Problem ist irgendwie seltsam. Ich habe diese Bulksms api von meinem Provider:Request-URI zu lang - SMS API

http://www.estoresms.com/smsapi.php?username=user&password=1234&[email protected]@[email protected]@&[email protected]@[email protected]@&m 
[email protected]@[email protected]@& 

dann wickelte ich es in PHP und gab es 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); 

gewöhnlich, es funktionierte gut, aber wenn $ Recepient (Telefonnummern) sind mehr als 300, erhalte ich einen Fehler:

Anfrage-URI zu lang Die Länge der angeforderten URL überschreitet das Kapazitätslimit für diesen Server. Darüber hinaus wurde ein Fehler 414 Request-URI Too Long bei dem Versuch, ein ErrorDocument zu verwenden, um die Anforderung zu verarbeiten, festgestellt.

Aber BulkSMS sollte in der Lage sein, zu Tausenden von Zahlen gleichzeitig zu senden. Aus meinen Recherchen habe ich herausgefunden, dass die URL begrenzt ist. Ich bin nicht der Serverbesitzer. Ich arbeite an einem gemeinsamen Hosting-Plan. Wie kann ich dieses Problem umgehen? Ich weiß, dass es eine Lösung gibt, die nicht bedeutet, meinen eigenen Server zu kaufen.

Dank

Antwort

0

Also dann, ich hatte einen Weg, um mein eigenes Problem zu finden. Wenn die API nicht Tausende von Zahlen gleichzeitig zulässt, dann teilen wir sie zum Zeitpunkt der Ausführung in Stücke.

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);  
} 
0

Können Sie versuchen, die API-Nutzung POST anstelle von GET zu machen. Es würde das Problem lösen.

Edit:

Ich bin nicht sicher, dass Ihre API POST überprüfen, aber versuchen, dass:

$api = "http://www.estoresms.com/smsapi.php"; 
$data = array('username' => $sms_user, 'password' => $sms_pwd, 'sender' => $sender_id , 'recipient' => $numbers , 'message' => $text); 

function curl_get_contents($url) 
{ 
$ch = curl_init($url); 
curl_setopt($handle, CURLOPT_POST, true); 
curl_setopt($handle, CURLOPT_POSTFIELDS, $data); 
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); 
+0

Pls, wie kann ich über POST gehen? Danke – david

+0

Ich habe es versucht, es hat nicht funktioniert. Sogar für irgendwelche Zahlen, ob wenige oder viele. Mein ursprünglicher Code funktioniert. Das Problem ist, wenn die Zahlen so viele sind, schlägt es fehl. – david

+0

Das bedeutet, dass die API POST-Daten nicht liest, das ist seltsam seit So wie ich es verstanden habe, ist es, dass sie bedient werden, dass die Anfrage bloke? –