Преобразовать запрос cURL в переполнение стека Guzzle

Я пытаюсь преобразовать существующий запрос cURL в Guzzle 6. Это запрос cURL. Код для запроса curl выглядит следующим образом.

$xml = file_get_content('new.xml');

// Initialize handle and set options
$ch = curl_init();

curl_setopt( $ch, CURLOPT_URL,     $this->xml_post_url );//
curl_setopt( $ch, CURLOPT_SSLCERT, $this->sslcert );//
curl_setopt( $ch, CURLOPT_SSLKEY,  $this->sslkey );//
curl_setopt( $ch, CURLOPT_POSTFIELDS, $raw_request );
curl_setopt( $ch, CURLOPT_TIMEOUT, 30 );
curl_setopt( $ch, CURLOPT_CONNECTTIMEOUT, 20 );
curl_setopt( $ch, CURLOPT_HTTPHEADER, array('Connection: close') );
curl_setopt( $ch, CURLOPT_SSL_VERIFYPEER, FALSE);
curl_setopt( $ch, CURLOPT_SSLCERTPASSWD, $this->sslcertpasswd );
curl_setopt( $ch, CURLOPT_SSLKEYPASSWD,  $this->sslkeypasswd );
curl_setopt( $ch, CURLOPT_RETURNTRANSFER, true ); // capture the response to a string

// give it 3 tries
for ($i=1; $i<=3; ++$i) {

$raw_response = curl_exec($ch);
$response_HTTP_CODE = (int) curl_getinfo( $ch, CURLINFO_HTTP_CODE );

if (200 <= $response_HTTP_CODE and $response_HTTP_CODE < 400) {

if ($raw_response !== false) {

curl_close( $ch );
return $raw_response;

}

}
elseif (500 <= $response_HTTP_CODE and strlen( $raw_response ) > 0) {

$offset = strpos( $raw_response, '<errortext>');

if ($offset !== false) {

curl_close( $ch );
break;

}
}

sleep( 1 ); // give it a moment
}

curl_close( $ch );

Есть ли в любом случае, чтобы преобразовать это в запрос Guzzle разумным способом с опцией повтора, а также, если это возможно.

Это то что я пробовал

$request = $this->getClient()->post($this->request['endPointUrl'], [
'body' => $xml,
'cert' => $this->request['sslCert'],
'config' => [
'curl' => [
CURLOPT_SSLVERSION => CURL_SSLVERSION_TLSv1,
CURLOPT_SSL_VERIFYHOST => false,
CURLOPT_SSL_VERIFYPEER => false,
CURLOPT_RETURNTRANSFER => true
]
]
]);
$response = $request->send()->xml();

Но я получаю исключение cURL.

1

Решение

Хорошо, наконец, я решил эту проблему. Я публикую свое решение с надеждой, что оно кому-нибудь поможет.

$client = new Client();
$client->setDefaultOption('verify', false);

$response = $client->post($endPointUrl, [
'body'    => ['file_filed' => $xml],
'cookies' => true,
'cert'    => [$sslCert, $sslCertPassword],
'ssl_key' => [$sslKey, $sslKeyPassword]
]);

if (200 === $response->getStatusCode()) {

$xmlResponse = $response->xml();

} else {

// do something with error.

}

Для повтора я использовал Ждем повтор подписчика

1

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

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

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