-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathFfeWeb.cs
134 lines (112 loc) · 4.27 KB
/
FfeWeb.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using Serilog;
using System;
using System.IO;
using System.Net;
using System.Net.Http;
namespace FFE
{
public class FfeWeb
{
public bool GenerateRandomUserAgent { get; set; } = true;
private static readonly HttpClient httpClient;
private static readonly ILogger log;
static FfeWeb()
{
ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12
| SecurityProtocolType.Tls11
| SecurityProtocolType.Tls
| SecurityProtocolType.Ssl3;
HttpClientHandler handler = new HttpClientHandler()
{
AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate | DecompressionMethods.None
};
httpClient = new HttpClient(handler);
log = Log.ForContext("UDF", "FFE");
}
public static string GetHttpResponseContent(Uri uri, bool generateUserAgent = false)
{
return GetHttpResponseContent(uri.AbsoluteUri, generateUserAgent);
}
public static string GetHttpResponseContent(string uri, bool generateUserAgent = false)
{
if (generateUserAgent)
{
SetValidGeneratedUserAgent();
}
using (HttpResponseMessage response = httpClient.GetAsync(uri).Result)
{
response.EnsureSuccessStatusCode();
using (HttpContent content = response.Content)
{
string result = content.ReadAsStringAsync().Result;
return result;
}
}
}
public static byte[] GetHttpResponseContentAsByteArray(string uri, bool generateUserAgent = false)
{
if (generateUserAgent)
{
SetValidGeneratedUserAgent();
}
using (HttpResponseMessage response = httpClient.GetAsync(uri).Result)
{
response.EnsureSuccessStatusCode();
using (HttpContent content = response.Content)
{
return content.ReadAsByteArrayAsync().Result;
}
}
}
public static Stream GetHttpResponseContentAsStreamReader(string uri, bool generateUserAgent = false)
{
if (generateUserAgent)
{
SetValidGeneratedUserAgent();
}
/*Stream stream = httpClient.GetStreamAsync(uri).Result;
return new StreamReader(stream);*/
return httpClient.GetStreamAsync(uri).Result;
}
public static string GetValidUserAgent(int maxTries = 5)
{
// If a invalid user agent string is generated, then try again (max. <maxTries> times).
string userAgent = null;
int tries = 0;
bool validUserAgent = false;
do
{
userAgent = new Bogus.DataSets.Internet().UserAgent();
HttpRequestMessage httpRequestMessage = new HttpRequestMessage();
validUserAgent = httpRequestMessage.Headers.UserAgent.TryParseAdd(userAgent);
tries++;
} while (!validUserAgent
&& tries <= maxTries);
return userAgent;
}
#region Private
private static void SetValidGeneratedUserAgent(int maxTries = 5)
{
try
{
// If a invalid user agent string is generated, then try again (max. <maxTries> times).
string userAgent = null;
int tries = 0;
bool validUserAgent = false;
do
{
userAgent = new Bogus.DataSets.Internet().UserAgent();
httpClient.DefaultRequestHeaders.UserAgent.Clear();
validUserAgent = httpClient.DefaultRequestHeaders.UserAgent.TryParseAdd(userAgent);
tries++;
} while (!validUserAgent
&& tries <= maxTries);
}
catch (Exception ex)
{
log.Error(ex.Message);
}
}
#endregion
}
}