HttpClient 将表单发布到网页 returns 相同的页面
HttpClient posting form to a web page returns the same page
我在网站上有一个专为添加特定实体而设计的页面。我想要做的是使用 C# HttpClient 添加这个实体。我的步骤顺序如下所示:
首先我使用客户端进行身份验证:
public static async Task<CookieCollection> WebPortalLogin(string baseURI, string phoneNo, string pin)
{
var cookies = new CookieContainer();
var handler = new HttpClientHandler()
{
CookieContainer = cookies
};
var client = new HttpClient(handler);
var content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string,string>("page","login"),
new KeyValuePair<string,string>("noStaticBox",""),
new KeyValuePair<string,string>("username",phoneNo),
new KeyValuePair<string,string>("password",pin),
new KeyValuePair<string,string>("login","Увійти"),
new KeyValuePair<string,string>("_reqNo","0"),
});
var response = await client.PostAsync(baseURI, content);
response.EnsureSuccessStatusCode();
var stringResponse = response.Content.ReadAsStringAsync().Result;
var cookieJar = cookies.GetCookies(new Uri(baseURI));
return cookieJar;
}
然后我发送 POST 请求编辑包含我要保存的所有数据的页面:
public static async Task<HttpResponseMessage> AddCar(string baseURI, string phoneNo, CookieCollection cookieJar, string carNo, string owner)
{
var cookieContainer = new CookieContainer();
var client = new HttpClient(new HttpClientHandler() { CookieContainer = cookieContainer });
var content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string,string>("carNo",carNo),
new KeyValuePair<string,string>("userName",owner),
new KeyValuePair<string,string>("page","carNumbers"),
new KeyValuePair<string,string>("submit","Додати"),
new KeyValuePair<string,string>("operation","addCar"),
new KeyValuePair<string,string>("_reqNo","0")
});
cookieContainer.Add(new Uri(baseURI), cookieJar);
var response = await client.PostAsync(baseURI, content);
var stringResponse = response.Content.ReadAsStringAsync().Result;
return response;
}
然而,这个 POST 请求什么也没做,作为回应我有这个非常编辑的页面,虽然当我以正常方式(通过网站)添加这个实体时,我得到空响应并且实体成功保存。已经检查过 cookie - 它们没问题。我唯一能想到的就是请求headers,但是成功的POST只有常规的,比如Accept,Accept-Encoding等。我可能犯的错误是什么,我怎样才能发布?注意:所有连接都使用 HTTPS。
好的,弄乱了几个小时后我发现问题出在一个请求参数中,与 httpclient 无关
我在网站上有一个专为添加特定实体而设计的页面。我想要做的是使用 C# HttpClient 添加这个实体。我的步骤顺序如下所示:
首先我使用客户端进行身份验证:
public static async Task<CookieCollection> WebPortalLogin(string baseURI, string phoneNo, string pin)
{
var cookies = new CookieContainer();
var handler = new HttpClientHandler()
{
CookieContainer = cookies
};
var client = new HttpClient(handler);
var content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string,string>("page","login"),
new KeyValuePair<string,string>("noStaticBox",""),
new KeyValuePair<string,string>("username",phoneNo),
new KeyValuePair<string,string>("password",pin),
new KeyValuePair<string,string>("login","Увійти"),
new KeyValuePair<string,string>("_reqNo","0"),
});
var response = await client.PostAsync(baseURI, content);
response.EnsureSuccessStatusCode();
var stringResponse = response.Content.ReadAsStringAsync().Result;
var cookieJar = cookies.GetCookies(new Uri(baseURI));
return cookieJar;
}
然后我发送 POST 请求编辑包含我要保存的所有数据的页面:
public static async Task<HttpResponseMessage> AddCar(string baseURI, string phoneNo, CookieCollection cookieJar, string carNo, string owner)
{
var cookieContainer = new CookieContainer();
var client = new HttpClient(new HttpClientHandler() { CookieContainer = cookieContainer });
var content = new FormUrlEncodedContent(new[]{
new KeyValuePair<string,string>("carNo",carNo),
new KeyValuePair<string,string>("userName",owner),
new KeyValuePair<string,string>("page","carNumbers"),
new KeyValuePair<string,string>("submit","Додати"),
new KeyValuePair<string,string>("operation","addCar"),
new KeyValuePair<string,string>("_reqNo","0")
});
cookieContainer.Add(new Uri(baseURI), cookieJar);
var response = await client.PostAsync(baseURI, content);
var stringResponse = response.Content.ReadAsStringAsync().Result;
return response;
}
然而,这个 POST 请求什么也没做,作为回应我有这个非常编辑的页面,虽然当我以正常方式(通过网站)添加这个实体时,我得到空响应并且实体成功保存。已经检查过 cookie - 它们没问题。我唯一能想到的就是请求headers,但是成功的POST只有常规的,比如Accept,Accept-Encoding等。我可能犯的错误是什么,我怎样才能发布?注意:所有连接都使用 HTTPS。
好的,弄乱了几个小时后我发现问题出在一个请求参数中,与 httpclient 无关