curl php post — Служба недоступна — достигнуто максимальное количество активных клиентов

Привет я делаю curl PHP POST запрос (из-за междоменного происхождения), и я столкнулся с проблемой. Запрос на отправку отправляется на компьютер, на котором размещен пользовательский веб-сервер, который я не могу контролировать. Первые запросы (например, 15-20 в порядке), но после этого количества запросов я получаю 503 error ответ с сообщением об ошибке

Услуга недоступна — достигнуто максимальное количество активных клиентов.

Я полагаю, что curl создает новое соединение каждый раз, когда я отправляю запрос. Я также предполагаю, что на сервере машины может быть открыто только несколько соединений.

Вот мой 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 дней пробовать различные варианты и данные заголовка я не могу заставить его работать. Как заставить curl использовать только одно соединение?

большое спасибо

РЕДАКТИРОВАТЬ: Я нашел проблему сегодня. Сервер может иметь только 3 активных клиента. Я обнаружил, что в первом заголовке ответа от сервера указан SET cookie, и мне нужно использовать этот cookie в других запросах. Я установил это вручную, и это работает. Есть ли способ сделать это автоматически?

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

В любом случае, спасибо

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]