Improve debug logging of Web cmdlet request and response (#25479)

This commit is contained in:
Justin Grote
2025-05-01 17:27:35 +05:00
committed by GitHub
parent d5b63e132f
commit 9153f8a0e0
2 changed files with 43 additions and 31 deletions
@@ -567,29 +567,10 @@ namespace Microsoft.PowerShell.Commands
FillRequestStream(request);
try
{
long requestContentLength = request.Content is null ? 0 : request.Content.Headers.ContentLength.Value;
string reqVerboseMsg = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.WebMethodInvocationVerboseMsg,
request.Version,
request.Method,
requestContentLength);
WriteVerbose(reqVerboseMsg);
_maximumRedirection = WebSession.MaximumRedirection;
using HttpResponseMessage response = GetResponse(client, request, handleRedirect);
string contentType = ContentHelper.GetContentType(response);
long? contentLength = response.Content.Headers.ContentLength;
string respVerboseMsg = contentLength is null
? string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.WebResponseNoSizeVerboseMsg, response.Version, contentType)
: string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.WebResponseVerboseMsg, response.Version, contentLength, contentType);
WriteVerbose(respVerboseMsg);
bool _isSuccess = response.IsSuccessStatusCode;
// Check if the Resume range was not satisfiable because the file already completed downloading.
@@ -638,6 +619,9 @@ namespace Microsoft.PowerShell.Commands
string detailMsg = string.Empty;
try
{
string contentType = ContentHelper.GetContentType(response);
long? contentLength = response.Content.Headers.ContentLength;
// We can't use ReadAsStringAsync because it doesn't have per read timeouts
TimeSpan perReadTimeout = ConvertTimeoutSecondsToTimeSpan(OperationTimeoutSeconds);
string characterSet = WebResponseHelper.GetCharacterSet(response);
@@ -1296,7 +1280,40 @@ namespace Microsoft.PowerShell.Commands
_cancelToken = new CancellationTokenSource();
try
{
long requestContentLength = request.Content is null ? 0 : request.Content.Headers.ContentLength.Value;
string reqVerboseMsg = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.WebMethodInvocationVerboseMsg,
request.Version,
request.Method,
requestContentLength);
WriteVerbose(reqVerboseMsg);
string reqDebugMsg = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.WebRequestDebugMsg,
request.ToString());
WriteDebug(reqDebugMsg);
response = client.SendAsync(currentRequest, HttpCompletionOption.ResponseHeadersRead, _cancelToken.Token).GetAwaiter().GetResult();
string contentType = ContentHelper.GetContentType(response);
long? contentLength = response.Content.Headers.ContentLength;
string respVerboseMsg = contentLength is null
? string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.WebResponseNoSizeVerboseMsg, response.Version, contentType)
: string.Format(CultureInfo.CurrentCulture, WebCmdletStrings.WebResponseVerboseMsg, response.Version, contentLength, contentType);
WriteVerbose(respVerboseMsg);
string resDebugMsg = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.WebResponseDebugMsg,
response.ToString());
WriteDebug(resDebugMsg);
}
catch (TaskCanceledException ex)
{
@@ -1361,17 +1378,6 @@ namespace Microsoft.PowerShell.Commands
{
FillRequestStream(requestWithoutRange);
long requestContentLength = requestWithoutRange.Content is null ? 0 : requestWithoutRange.Content.Headers.ContentLength.Value;
string reqVerboseMsg = string.Format(
CultureInfo.CurrentCulture,
WebCmdletStrings.WebMethodInvocationVerboseMsg,
requestWithoutRange.Version,
requestWithoutRange.Method,
requestContentLength);
WriteVerbose(reqVerboseMsg);
response.Dispose();
response = GetResponse(client, requestWithoutRange, handleRedirect);
}
@@ -164,7 +164,7 @@
</data>
<data name="InsecureRedirection" xml:space="preserve">
<value>Cannot follow an insecure redirection by default. Reissue the command specifying the -AllowInsecureRedirect switch. </value>
</data>
</data>
<data name="KeysWithDifferentCasingInJsonString" xml:space="preserve">
<value>Cannot convert the JSON string because it contains keys with different casing. Please use the -AsHashTable switch instead. The key that was attempted to be added to the existing key '{0}' was '{1}'.</value>
</data>
@@ -243,6 +243,12 @@
<data name="WebResponseVerboseMsg" xml:space="preserve">
<value>Received HTTP/{0} {1}-byte response of content type {2}</value>
</data>
<data name="WebRequestDebugMsg" xml:space="preserve">
<value>Request {0}</value>
</data>
<data name="WebResponseDebugMsg" xml:space="preserve">
<value>Response {0}</value>
</data>
<data name="WebResponseNoSizeVerboseMsg" xml:space="preserve">
<value>Received HTTP/{0} response of content type {1} of unknown size</value>
</data>