-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathWebClient.csx
More file actions
42 lines (34 loc) · 1.43 KB
/
WebClient.csx
File metadata and controls
42 lines (34 loc) · 1.43 KB
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
#load "ComicHTML.csx"
using System.Net.Http;
public class WebClient
{
readonly HttpClient imageHttpClient;
readonly HttpClient comicHttpClient;
readonly string loginCookie;
readonly string baseAddress;
public WebClient(string addressOfFirstComic, string loginCookie)
{
this.loginCookie = loginCookie;
var uriOfFirstComic = new Uri(addressOfFirstComic);
baseAddress = $"{uriOfFirstComic.Scheme}://{uriOfFirstComic.Host}";
PathOfFirstComic = uriOfFirstComic.PathAndQuery;
var loggedInHandler = new HttpClientHandler { UseCookies = false };
comicHttpClient = new HttpClient(loggedInHandler) { BaseAddress = new Uri(baseAddress) };
imageHttpClient = new HttpClient();
}
public string PathOfFirstComic { get; }
public async Task<ComicHTML> GetComicHTML(string request) {
Console.WriteLine($"Analyzing {baseAddress}{request}");
var message = new HttpRequestMessage(HttpMethod.Get, request);
message.Headers.Add("Cookie", loginCookie);
var result = await comicHttpClient.SendAsync(message);
result.EnsureSuccessStatusCode();
var html = await result.Content.ReadAsStringAsync();
return new ComicHTML(html);
}
public async Task<byte[]> DownloadComic(string comicURL)
{
Console.WriteLine($"Downloading {comicURL}...");
return await imageHttpClient.GetByteArrayAsync(comicURL);
}
}