- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我将身份验证 cookie 存储到我的应用程序中的静态 CookieContainer 中,这要感谢关于此 link 的回答(1)
我实现了在 DocumentCompleted
事件上获取 CookieContainer 的代码:
private void webBrowser1_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e)
{
if (!this.webBrowser1.Document.Title.Replace(" ", string.Empty).ToLower().Contains("xxx"))
{
CookieContainer ck = GetUriCookieContainer(this.webBrowser1.Url);
validSession = ck;
Succeeded = true;
this.Close();
}
}
因为我正在使用 WebClient
,所以我需要创建它的扩展以便它可以存储 CookieContainer:
public class WebClientEx : WebClient
{
public WebClientEx()
: this(new CookieContainer())
{ }
public WebClientEx(CookieContainer c)
{
this.CookieContainer = c;
}
public CookieContainer CookieContainer { get; set; }
protected override WebRequest GetWebRequest(Uri address)
{
WebRequest request = base.GetWebRequest(address);
var castRequest = request as HttpWebRequest;
if (castRequest != null)
{
castRequest.CookieContainer = this.CookieContainer;
}
return request;
}
}
从 (1) 存储 CookieContainer 后,我无需身份验证即可请求页面的任何内容:
WebClientEx e = new WebClientEx(validSession);
string x = e.UploadString(new Uri("http://localhost:14590/default.aspx"), "ola");
// x now contains the html page of default.aspx
问题是当我尝试使用 UploadFileAsync
将文件上传到服务器时,我将尝试逐步描述该问题:
WebBrowser
控件登录网站UploadFileAsync
方法上传文件UploadFileCompleted
事件的结果 (e.result) 是登录页面的 html 内容,这意味着我在 WebClient 中传递的 CookieContainer 不起作用。 但是请看这些步骤,上传功能可以正常工作:
UploadFileAsync
方法上传文件 -> 成功 我不明白为什么会这样?你知道为什么吗?请注意,如果我使用 WebClient.UploadString() 等其他方法,则如果 cookieContainer 可用,则不会重定向回登录页面。
最佳答案
由于某些未知原因,CookieContainer 导致了这个问题,在观看 fiddler 之后,我意识到从 webclient
到服务器的第一次调用不包含任何 cookie,所以我去掉 CookieContainer 并替换它与此:
WebClient e = new WebClient();
e.Headers.Add(HttpRequestHeader.Cookie, "cookies I get from webbrowser control");
瞧,一切都很好!
关于c# - WebClient.UploadFileASync 的非常奇怪的行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34151674/
我将身份验证 cookie 存储到我的应用程序中的静态 CookieContainer 中,这要感谢关于此 link 的回答(1) 我实现了在 DocumentCompleted 事件上获取 Cook
我需要一些关于奇怪的 WebClient.UploadFileAsync() 行为的帮助。我正在使用 POST 方法将文件上传到远程 HTTP 服务器 (nginx)。 POST 通过 PHP 脚本(
我正在使用 WebClient.UploadFileAsync 将本地文件上传到网络服务器,我想知道上传完成后是否可以从服务器获得任何响应? 当使用 WebClient.UploadFile 时,可以
当我执行以下代码时: public static async Task UploadFile(string serverPath, string pathToFile, string authToke
我正在使用 System.Net.WebClient类,我正在尝试使用 UploadFileAsync 方法上传文件。我正在使用 Visual Studio 2010,我的所有项目都设置为使用 .NE
我是一名优秀的程序员,十分优秀!