2016-04-01 8 views
0

になったこんにちは私はcurl PHP POSTリクエスト(クロスドメインの由来のため)しており、問題に直面しています。投稿要求は、私が制御できないカスタムWebサーバーをホストするマシンに送信されます。最初のリクエスト(15-20のように)はOKですが、この数のリクエストのあとで、エラーメッセージcurl php post - サービスが利用できない - アクティブなクライアントの最大数が

のサービスを利用できません。サービス使用不可 - アクティブなクライアントの最大数に達しました。

私は、リクエストを送信するたびにカールが新しい接続を作成しているとします。私はまた、マシンサーバがいくつかの接続を開くことができると仮定します。ここで

は私のPHPコードです:

$data = array("getTags" => array("Start_dav","CutON"), "includeTagMetadata" => false);                  
$data_string = json_encode($data); 

//open connection 
$ch = curl_init(); 

//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,"http://domainipaddres/"); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$data_string); 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_COOKIE, "SID=8c81775da6"); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                   
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string), 
     'Connection: Keep-alive', 
     'Keep-alive: 300' 
    )                  
); 

//execute post 
$result = curl_exec($ch); 
//close connection 
curl_close($ch); 

私は実際にそれを把握する必要がありますが、さまざまなオプションとヘッダ件のデータを試みるの2日後、私はそれが動作します傾けます。カールに強制的に1つの接続だけを使用する方法

EDITありがとうございました。私は今日の問題を発見しました。サーバーにはアクティブなクライアントが3つしかありません。私は、サーバーからの最初の応答ヘッダーがSET Cookieであり、別の要求でそのCookieを使用する必要があることがわかりました。私は手動でそれを設定し、それは動作します。これを自動的に行う方法はありますか?

+0

とにかくありがとうね。言い換えれば、それは問題ではなく、最後に処理能力がないことです。 –

+0

私は503応答を得た後、次の要求はcca 10分待った後に動作します。しかし、最初に列に送られていない20の要求は大丈夫です。それは奇妙なことです。私は、接続がすぐに要求後に閉じられる場合、それは大丈夫だと思う。または、curlがリクエストのために同じ接続を使用していて、それがまだ生存している場合です。それは問題を起こすべきではありません –

+0

私はカールオプションCURLOPT_COOKIE、CURLOPT_SSL_VERIFYPEER、CURLOPT_FORBID_REUSEなしで試してみたいと思います。それなしで何が起こるかを見てください... – Werner

答えて

0

今日、私はこの問題を解決しました。私はレスポンスヘッダを調べ、サーバがクッキーを設定するのを見た。私はちょうどクッキーを保存し、別の要求とその作業に使用する必要がありました。ここでは、コードの一部です:他のサーバは非常に限られており、ほんの数秒の操作を処理できるように

$data_string = json_encode($data); 
$agent= 'Mozilla/5.0 (Windows; U;Windows NT 5.1; ru; rv:1.8.0.9) Gecko/20061206 Firefox/1.5.0.9'; 
//open connection 
$ch = curl_init(); 
$f = fopen('request.txt', 'w'); //writes headers to this file 
//set the url, number of POST vars, POST data 
curl_setopt($ch,CURLOPT_URL,"domainipaddress"); 
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST"); 
curl_setopt($ch,CURLOPT_POSTFIELDS,$data_string); 
$tmpfname = dirname(__FILE__).'/cookie.txt'; //saves the cookie from server 
curl_setopt($ch, CURLOPT_COOKIEJAR, $tmpfname); 
curl_setopt($ch, CURLOPT_COOKIEFILE, $tmpfname); 
curl_setopt($ch, CURLOPT_ENCODING, ''); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER , false); 
curl_setopt($ch, CURLOPT_USERAGENT, $agent); 
curl_setopt($ch, CURLOPT_AUTOREFERER, true); 
curl_setopt($ch, CURLOPT_VERBOSE, 1); 
curl_setopt($ch, CURLOPT_STDERR, $f); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_setopt($ch, CURLOPT_FORBID_REUSE, false);                  
curl_setopt($ch, CURLOPT_HTTPHEADER, array(                  
    'Content-Type: application/json',                     
    'Content-Length: ' . strlen($data_string), 
     'Connection: keep-alive', 
     "Keep-Alive: 300" 
    )                  
); 

//execute post 
$result = curl_exec($ch); 
$headers = curl_getinfo($ch); 
fclose($f); 

関連する問題