Mee*_*tat 16 html c# cookies webclient
我刚开始尝试使用C#WebClient.我所拥有的是下面的代码,它从网站获取html代码并将其写入.txt文件.我唯一的问题是有些网站要求您在使用网站之前接受cookie.这导致的不是将真实的网站html代码写入.txt文件,而是编写cookie popup html代码.
码:
string downloadedString;
System.Net.WebClient client;
client = new System.Net.WebClient();
//"http://nl.wikipedia.org/wiki/Lijst_van_spelers_van_het_Nederlands_voetbalelftal"
downloadedString = client.DownloadString(textBox1.Text);
using (StreamWriter write = new StreamWriter("Data.txt"))
{
write.Write(downloadedString);
}
Run Code Online (Sandbox Code Playgroud)
那么这个解决方案是什么?有人可以指引我走正确的道路吗?
PaR*_*RaJ 26
用法:
CookieContainer cookieJar = new CookieContainer();
cookieJar.Add(new Cookie("my_cookie", "cookie_value", "/", "mysite"));
CookieAwareWebClient client = new CookieAwareWebClient(cookieJar);
string response = client.DownloadString("http://example.com/response_with_cookie_only.php");
Run Code Online (Sandbox Code Playgroud)
public class CookieAwareWebClient : WebClient
{
public CookieContainer CookieContainer { get; set; }
public Uri Uri { get; set; }
public CookieAwareWebClient()
: this(new CookieContainer())
{
}
public CookieAwareWebClient(CookieContainer cookies)
{
this.CookieContainer = cookies;
}
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = this.CookieContainer;
}
HttpWebRequest httpRequest = (HttpWebRequest)request;
httpRequest.AutomaticDecompression = DecompressionMethods.GZip | DecompressionMethods.Deflate;
return httpRequest;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
WebResponse response = base.GetWebResponse(request);
String setCookieHeader = response.Headers[HttpResponseHeader.SetCookie];
//do something if needed to parse out the cookie.
if (setCookieHeader != null)
{
Cookie cookie = new Cookie(); //create cookie
this.CookieContainer.Add(cookie);
}
return response;
}
}
Run Code Online (Sandbox Code Playgroud)
您将看到GetWebRequest和GetWebResponse的两个重写方法.可以重写这些方法来处理cookie容器.
小智 5
只需将标题中的 cookie 字符串存储到本地会话 _cookies 字符串中
if (System.Web.HttpContext.Current.Session["cookie"] != null)
_cookies = System.Web.HttpContext.Current.Session["cookie"].ToString();
using (WebClient wc = new WebClient())
{
wc.Headers.Add("Cookie", _cookies);
string HtmlResult = wc.UploadString(bridge_url, myParameters);
_cookies = wc.ResponseHeaders["Set-Cookie"];
Debug.WriteLine("Headers" + _cookies);
System.Web.HttpContext.Current.Session["cookie"] = _cookies;
}
Run Code Online (Sandbox Code Playgroud)
这可能与How can I get the WebClient to use Cookies?非常相似?
我上面提到的问题是针对VB.NET的,但是对于C#来说机制应该是相同的。我怀疑您看到的行为是网站正在发送 cookie,然后请求返回,但您的客户端未设置为将 cookie 返回到服务器,因此它会将其解释为您“不接受 cookie”。
您是否使用过像 Fiddler 这样的分析工具来分析与客户之间的通信内容?
您可能还必须发送特定的 HTTP 标头来表明您接受 cookie,但我不记得在我过去的经验中需要这样做。
| 归档时间: |
|
| 查看次数: |
31527 次 |
| 最近记录: |