HttpWebRequestExecutor 1.1.0
See the version list below for details.
dotnet add package HttpWebRequestExecutor --version 1.1.0
NuGet\Install-Package HttpWebRequestExecutor -Version 1.1.0
<PackageReference Include="HttpWebRequestExecutor" Version="1.1.0" />
<PackageVersion Include="HttpWebRequestExecutor" Version="1.1.0" />
<PackageReference Include="HttpWebRequestExecutor" />
paket add HttpWebRequestExecutor --version 1.1.0
#r "nuget: HttpWebRequestExecutor, 1.1.0"
#:package HttpWebRequestExecutor@1.1.0
#addin nuget:?package=HttpWebRequestExecutor&version=1.1.0
#tool nuget:?package=HttpWebRequestExecutor&version=1.1.0
Http Web Parser
What this libary will accomplish:
This library will parse raw HTTP request text to a C# object. This allows you save all the information about a particular web request in permanent storage, decoupling the request properties from any particular framework.
This libary will also build a .NET HttpWebRequest object from the raw request text or the JSON object.
IgnoreSerialization options allows the client to ignore certain headers like cookies, headers, etc.
Parsing Usage:
Sample Raw Web Request
var raw = "
GET https://httpbin.org/get HTTP/1.1
Host: httpbin.org
Connection: keep-alive
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/62.0.3202.94 Safari/537.36
Upgrade-Insecure-Requests: 1
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: en-US,en;q=0.9";
IgnoreHttpParserOptions:
You can specify what the parser should not serialize. Pass IgnoreHttpParserOptions as an optional parameter to the parser. For example, it might not make sense to parse the request body if you are replacing with it with another value.
IgnoreHttpParserOptions options = new IgnoreHttpParserOptions { IgnoreRequestBody = true };
Parse to ParsedRequest object:
var parsed = Parser.ParseRawRequest(raw);
Build .NET HttpWebRequest Usage:
HttpWebRequest request = HttpWebRequestBuilder.InitializeWebRequest(parsed);
Invoking callback in InitializeWebRequest()
Calling request.GetRequestStream() closes the request for adding headers, so unless you are positive you don't need to add any new headers after writing the request body, use the call back to defer this to your client
What this looks like:
// build request
HttpWebRequest request = ... build request
// defer control back to the calling method
callback?.Invoke(request);
// add request body
request.WritePostDataToRequestStream(requestBody);
Sample RequestBuilder invoking callback
void ClientBuildRequest()
{
// parse raw request...
HttpWebRequest request = HttpWebRequestBuilder.InitializeWebRequest(parsed, AddMoreDynamicHeaders);
// do stuff with the completed request
}
static void AddMoreDynamicHeaders(HttpWebRequest request)
{
// request.Headers.Add(...)
}
Execute Web Request and capture response:
using (var httpWebResponse = request.GetResponse())
{
httpWebResponse.GetParsedWebResponse();
}
ParsedResponse is a flattened version of HttpWebResponse
string ResponseText
int StatusCode
string StatusDescription
string Cookies
Uri ResponseUri
Dictionary<string, string[]> ResponseHeaders
Mocking Web Requests in unit tests with Moq
var response = new Mock<IHttpWebResponse>();
response.Setup(s => s.GetParsedWebResponse()).Returns(new ParsedWebResponse { ResponseText = "Hello world" });
var request = new Mock<IHttpWebRequest>();
request.Setup(c => c.GetResponse()).Returns(response.Object);
var factory = new Mock<IHttpWebRequestFactory>();
factory.Setup(c => c.BuildRequest(It.IsAny<ParsedHttpRequest>())).Returns(request.Object);
var parsed = Parser.ParseRawRequest("GET http://www.foo.com HTTP/1.1");
var result = factory.Object.BuildRequest(parsed).GetResponse();
Console.WriteLine(result); // "Hello world"
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net5.0 was computed. net5.0-windows was computed. net6.0 was computed. net6.0-android was computed. net6.0-ios was computed. net6.0-maccatalyst was computed. net6.0-macos was computed. net6.0-tvos was computed. net6.0-windows was computed. net7.0 was computed. net7.0-android was computed. net7.0-ios was computed. net7.0-maccatalyst was computed. net7.0-macos was computed. net7.0-tvos was computed. net7.0-windows was computed. net8.0 was computed. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
| .NET Core | netcoreapp2.0 was computed. netcoreapp2.1 was computed. netcoreapp2.2 was computed. netcoreapp3.0 was computed. netcoreapp3.1 was computed. |
| .NET Standard | netstandard2.0 is compatible. netstandard2.1 was computed. |
| .NET Framework | net461 was computed. net462 was computed. net463 was computed. net47 was computed. net471 was computed. net472 was computed. net48 was computed. net481 was computed. |
| MonoAndroid | monoandroid was computed. |
| MonoMac | monomac was computed. |
| MonoTouch | monotouch was computed. |
| Tizen | tizen40 was computed. tizen60 was computed. |
| Xamarin.iOS | xamarinios was computed. |
| Xamarin.Mac | xamarinmac was computed. |
| Xamarin.TVOS | xamarintvos was computed. |
| Xamarin.WatchOS | xamarinwatchos was computed. |
-
.NETStandard 2.0
- HttpBuilder (>= 1.0.0)
- HttpParser (>= 1.0.0)
- SharpZipLib (>= 1.1.0)
NuGet packages
This package is not used by any NuGet packages.
GitHub repositories
This package is not used by any popular GitHub repositories.