2017-07-11 11 views
0

私の問題は何とかして独特です。私は私のプロバイダからこのbulksms APIを持っている:Request-URIが長すぎます - 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]@& 

はその後、私はPHPでそれを包み、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); 

は通常、それがうまく働いたが、$仮親(電話番号)があるとき300を超えるとエラーが発生します。

リクエストURIが長すぎます 要求されたURLの長さが、このサーバーの容量制限を超えています。 さらに、ErrorDocumentを使用して要求を処理しようとしたときに、414 Request-URI Too Longエラーが発生しました。

しかし、BulkSMSは一度に何千もの数字に送信できるはずです。 私の研究から、URLには限界があることがわかりました。私はサーバーの所有者ではありません。私は共有ホスティングプランに取り組んでいます。どのように私はこの問題を回避することができますpls。私は自分自身のサーバーを買うことを意味する解決策があることを知っています。

おかげ

答えて

0

それでは、私は私自身の問題を回避する方法を見つけなければなりませんでした。 APIが一度に何千もの数字を許可しない場合は、実行時にチャンクに分割しましょう。

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

あなたの代わりにGETのAPIの使用POSTを作ってみることができます。それは問題を解決するだろう。

編集:

私はあなたのAPIはPOSTをチェックわからないんだけど、それを試してみてください。

$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

私はどのようにPOSTを使用して行くことができますか?ありがとう – david

+0

私はそれを試して、それは動作しませんでした。少数であろうとなかろうと、どんな数であっても。私の元のコードが動作します。問題は、数字が非常に多く、失敗したときです。 – david

+0

これは、APIがPOSTデータを読み込まないことを意味します。私が理解しているように、リクエストを処理してくれているからです。 –

関連する問題