使用Firebug登录登录过程时,我发现它是这样的
POST //The normal post request
GET //Automatically made after the login
GET //Automatically made after the login
GET //Automatically made after the login
Run Code Online (Sandbox Code Playgroud)
使用下面的代码发出帖子请求时,它没有发出浏览器正在进行的自动GET请求.
我的WebClient处理程序
using System;
using System.Net;
namespace Test
{
class HttpHandler : WebClient
{
private CookieContainer _mContainer = new CookieContainer();
protected override WebRequest GetWebRequest(Uri address)
{
var request = base.GetWebRequest(address);
if (request is HttpWebRequest)
{
(request as HttpWebRequest).CookieContainer = _mContainer;
}
return request;
}
protected override WebResponse GetWebResponse(WebRequest request)
{
var response = base.GetWebResponse(request);
if (response is HttpWebResponse)
_mContainer.Add((response as HttpWebResponse).Cookies);
return response;
}
public void ClearCookies()
{
_mContainer = new CookieContainer();
}
}
}
Run Code Online (Sandbox Code Playgroud)
使用代码
private static async Task<byte[]> LoginAsync(string username, string password)
{
var postData = new NameValueCollection();
var uri = new Uri(string.Format("http://{0}/", ServerName));
postData.Add("name", username);
postData.Add("password", password);
return await HttpHandler.UploadValuesTaskAsync(uri, postData);
}
Run Code Online (Sandbox Code Playgroud)
在尝试跟踪我的应用程序的连接时,它只执行POST请求而不执行其余的GET请求.[在浏览器中自动生成]
小智 11
尝试添加
request.AllowAutoRedirect = true;
Run Code Online (Sandbox Code Playgroud)
就在
var request = base.GetWebRequest(address);
Run Code Online (Sandbox Code Playgroud)
它为我解决了一些类似的问题,即使默认情况下autoredirect应该是ON.
HttpWebRequest鉴于这不是浏览器,这应该不足为奇。如果您需要执行这些重定向,请检查HttpWebResponse.StatusCode,如果它是300's 中的重定向代码,则发出另一个请求。10.3 重定向 3xx 下的链接注释:
此类状态代码指示用户代理需要采取进一步的操作才能满足请求。当且仅当第二个请求中使用的方法是 GET 或 HEAD 时,所需的操作可以由用户代理执行,而无需与用户交互。客户端应该检测无限重定向循环,因为此类循环会为每个重定向生成网络流量。
| 归档时间: |
|
| 查看次数: |
17595 次 |
| 最近记录: |