dlev'in yanıtı çalışmayı sonlandırdı, ancak çözümü uygularken sorunlar yaşadım ("{0} 'parametresi boş bir dize olamaz."), Bu nedenle başkalarının benzer sorunları olması durumunda tam kodu yazmaya karar verdim .
Amacım html'yi bir dize olarak almaktı, ancak çerezleri web isteğine eklemem gerekiyordu.
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;
}
}
Biz dlev cevabı kodunu kullanıyor::
var cookieNameValues = new Dictionary<string, string>();
cookieNameValues.Add("varName", "varValue");
var htmlResult = DownloadString(url, Encoding.UTF8, cookieNameValues);
:
Bu tam kodu kullanabilirsiniz nasıl bu çerezleri kullanarak dize indirir fonksiyondur Bu zor olurdu, çünkü çerezler bir HTTP kavramdır. Bu değişikliği yapmak için bir gerekçe var mı? – dlev
@dlev - WebRequest, uri'ye dayalı bir HttpWebRequest oluşturacaktır. Bu yüzden, kendi WebRequest nesnesini alay etmek ve/veya bir WebRequest döndüren kendi uri'mı kaydettirmek istiyorsam, bu yöntemi yalnızca bir HttpWebRequest nesnesiyle çalışmak için kısıtlamak istemiyorum. –
"webRequest" in çalışma zamanı türünün "HttpWebRequest" olacağını anlıyorum. Ancak "CookieContainer" öğesine erişilmesi, derleme zamanı türünün "HttpWebRequest" olmasını gerektirir. Ayrıca, kendinizi HTTP'ye kısıtlamadığınızdan da bahsetmişsinizdir, ancak bu durumda, bir HTTP yapısı olduğu için çerezlerin çok fazla bir anlamı yoktur (ilk etapta WebRequest'de bulunmalarının sebebi de budur.) – dlev