dlev의 응답이 끝났지 만 솔루션 구현에 문제가있었습니다 ("매개 변수 '{0}'은 (는) 빈 문자열이 될 수 없습니다.)), 그래서 누군가 다른 유사한 문제가있는 경우를 대비하여 전체 코드를 작성하기로했습니다. .
목표는 HTML을 문자열로 가져 오는 것이지만 웹 요청에 쿠키를 추가해야했습니다.
public static string DownloadString(string url, Encoding encoding, IDictionary<string, string> cookieNameValues)
{
using (var webClient = new WebClient())
{
var uri = new Uri(url);
var webRequest = WebRequest.Create(uri);
foreach(var nameValue in cookieNameValues)
{
webRequest.TryAddCookie(new Cookie(nameValue.Key, nameValue.Value, "/", uri.Host));
}
var response = webRequest.GetResponse();
var receiveStream = response.GetResponseStream();
var readStream = new StreamReader(receiveStream, encoding);
var htmlCode = readStream.ReadToEnd();
return htmlCode;
}
}
우리는 dlev의 대답에서 코드를 사용 :
var cookieNameValues = new Dictionary<string, string>();
cookieNameValues.Add("varName", "varValue");
var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);
:
이렇게하면 전체 코드를 사용하는 방법이다이 쿠키를 사용하여 문자열을 다운로드하는 기능입니다 쿠키는 HTTP 개념이기 때문에 어렵습니다. 이 변경을해야하는 이유가 있습니까? – dlev
@dlev - WebRequest는 uri를 기반으로 HttpWebRequest를 생성합니다. 따라서 내 자신의 WebRequest 객체를 조롱하거나 WebRequest를 반환하는 자체 URI를 등록하려는 경우이 메서드를 HttpWebRequest 객체 만 사용하도록 제한하고 싶지는 않습니다. –
'webRequest'의 런타임 타입이'HttpWebRequest'라고 이해합니다. 그러나'CookieContainer'에 접근하려면 컴파일 타임 타입이'HttpWebRequest'이어야합니다. 또한, 당신은 HTTP에 자신을 제한하지 않는다고 언급하지만, 쿠키는 HTTP 구조이기 때문에 그다지 의미가 없습니다 (처음에는'WebRequest'가 없다는 이유입니다). – dlev