C# 将整个HttpWebRequest写入文件 字节[]jData=Encoding.UTF8.GetBytesDATA; HttpWebRequest req=HttpWebRequestWebRequest.CreateURL; ServicePointManager.ServerCertificateValidationCallback+=新的RemoteCertificateValidationCallbacksender、证书、链、策略错误=>{return true;}; //所需的此标头方法无效 CredentialCache crCache=新的CredentialCache; crCache.Addnew UriURL,Basic,new NetworkCredentialuName,uPwd; 请求凭证=crCache; //下面需要,以使Cookie能够在每个请求上携带身份验证值。 req.CookieContainer=新CookieContainer; req.Accept=应用程序/json; 请求方法=POST; req.ContentType=application/json;字符集=utf-8; req.HEADERKEY.AddheaderKey,headerValue; req.GetRequestStream.WritejData,0,jData.Length; 使用HttpWebResponse res=HttpWebResponsereq.GetResponse{ 使用StreamReader strm=newstreamreaderres.GetResponseStream{ 结果=strm.ReadToEnd; } }

C# 将整个HttpWebRequest写入文件 字节[]jData=Encoding.UTF8.GetBytesDATA; HttpWebRequest req=HttpWebRequestWebRequest.CreateURL; ServicePointManager.ServerCertificateValidationCallback+=新的RemoteCertificateValidationCallbacksender、证书、链、策略错误=>{return true;}; //所需的此标头方法无效 CredentialCache crCache=新的CredentialCache; crCache.Addnew UriURL,Basic,new NetworkCredentialuName,uPwd; 请求凭证=crCache; //下面需要,以使Cookie能够在每个请求上携带身份验证值。 req.CookieContainer=新CookieContainer; req.Accept=应用程序/json; 请求方法=POST; req.ContentType=application/json;字符集=utf-8; req.HEADERKEY.AddheaderKey,headerValue; req.GetRequestStream.WritejData,0,jData.Length; 使用HttpWebResponse res=HttpWebResponsereq.GetResponse{ 使用StreamReader strm=newstreamreaderres.GetResponseStream{ 结果=strm.ReadToEnd; } },c#,httprequest,C#,Httprequest,上面几行代码是对JSon Web服务的简单调用。问题是,由于未经授权的错误,呼叫在一段时间后失败。因此,我需要将HttpWerRequest记录到一个文本文件中,以查看整个请求。这应该包括标题、身份验证凭据和正文。。我可以知道如何捕获整个请求并将其写入文件吗 感谢GetResponseStream提供了响应体流,而不是整个响应 您可以使用HttpWebResponse的Header属性来捕获头 GetResponseStream为整个响应提供一个响应体流 您可以使用HttpWebResponse

上面几行代码是对JSon Web服务的简单调用。问题是,由于未经授权的错误,呼叫在一段时间后失败。因此,我需要将HttpWerRequest记录到一个文本文件中,以查看整个请求。这应该包括标题、身份验证凭据和正文。。我可以知道如何捕获整个请求并将其写入文件吗

感谢

GetResponseStream提供了响应体流,而不是整个响应

您可以使用HttpWebResponse的Header属性来捕获头

GetResponseStream为整个响应提供一个响应体流

您可以使用HttpWebResponse的Header属性来捕获头


首先,您可以使用HttpClient将所有这些代码减少到3-4行。其次,您可以使用调试代理(如Fiddler)轻松捕获请求和响应。不能使用wireshark或Fiddlery您可以,但这有点冗长。或者,您可以创建和创建。无论如何,你都应该使用它。事实上,如果您使用的是.NET Core 3+,那么您已经间接地使用了它,因为HttpWebRequest被重新实现为HttpClient之上的一个遗留包装器。重复的答案描述了这两种技术—记录HttpClientHandler和启用网络跟踪First,您可以使用HttpClient将所有代码减少到3-4行。其次,您可以使用调试代理(如Fiddler)轻松捕获请求和响应。不能使用wireshark或Fiddlery您可以,但这有点冗长。或者,您可以创建和创建。无论如何,你都应该使用它。事实上,如果您使用的是.NET Core 3+,那么您已经间接地使用了它,因为HttpWebRequest被重新实现为HttpClients之上的一个遗留包装器。重复的答案描述了这两种技术-记录HttpClientHandler和启用网络跟踪hanks,这部分起作用,并给出了标题信息。想知道我们是否可以按原样重新创建发送给clint的整个请求。感谢您的建议,这部分工作正常,并提供了标题信息。想知道我们是否可以按原样重新创建发送给clint的整个请求。
for (int i = 0; i < req.Headers.Count; ++i)
{
    string header = req.Headers.GetKey(i);
    foreach (string value in req.Headers.GetValues(i))
    {
        Console.WriteLine("{0}: {1}", header, value);
    }
}