Ранее я описывал алгоритм авторизации Digest, как самому собрать пакет данных
Для PHP все оказалось проще, в CURL уже есть готовый механизм, который делает 2 запроса для правильной авторизации
Это параметр CURLOPT_HTTPAUTH => CURLAUTH_DIGEST,
Полностью запрос:
$request =[ 'SOAPAction: "http://yandex.ru/"', 'Content-Type: text/xml;charset=UTF-8', ]; $options = array( CURLOPT_URL => $url, CURLOPT_HEADER => true, CURLOPT_VERBOSE => true, CURLOPT_RETURNTRANSFER => true, CURLOPT_FOLLOWLOCATION => true, CURLOPT_SSL_VERIFYPEER => false, // for https CURLOPT_USERPWD => $username . ":" . $password, CURLOPT_HTTPAUTH => CURLAUTH_DIGEST, CURLOPT_HTTPHEADER => $request, CURLOPT_POST => true, CURLOPT_POSTFIELDS =>"xmlRequest=" . $input_xml // если нужно передать xml в теле POST ); $ch = curl_init(); curl_setopt_array( $ch, $options ); try { $raw_response = curl_exec( $ch ); // validate CURL status if(curl_errno($ch)) throw new Exception(curl_error($ch), 500); // validate HTTP status code (user/password credential issues) $status_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); if ($status_code != 200) throw new Exception("Response with Status Code [" . $status_code . "].", 500); } catch(Exception $ex) { if ($ch != null) curl_close($ch); throw new Exception($ex); } if ($ch != null) curl_close($ch); echo "raw response: " . $raw_response;