C#HttpClient不发送POST变量
我试图做一个应用程序,将发送一个POST请求https://owlexpress.kennesaw.edu/prodban/bwckschd.p_get_crse_unsec与一些信息并返回一个类列表。C#HttpClient不发送POST变量
你可以去这里通过搜索“我正在使用2015年秋季,数学,课程1190”。 https://owlexpress.kennesaw.edu/prodban/bwckschd.p_disp_dyn_sched
当我运行下面的代码时,它输出它返回到一个字符串,它将进入一个webbrowser组件。它显示:
Class Schedule Search
Fall Semester 2015
Mar 31, 2015
Stop You must select at least ONE subject .
我使用Chrome的调试找到POST值,并将其设置为它们是什么,当我使用该网站正常。我甚至包含了一些cookie,以防需要它们。
编辑:
好的,新的问题。我用了一个可行的浏览器,并得到了这一点:“term_in = 201508 & sel_subj =假& sel_day =假& sel_schd =假& sel_insm =假& SEL_C放=假& sel_levl =假& sel_sess =假& sel_instr =假& sel_ptrm =虚设& sel_attr = d ummy & sel_subj = MATH & sel_crse = 1190 & sel_title = & sel_insm =%25 & sel_from_cred = & sel_to_cr ED = & sel_camp =%25 & sel_levl =%25 & sel_ptrm =%25 & sel_instr =%25 & begin_hh = 0 & begin_mi = 0 &是gin_ap =一个& end_hh = 0 & end_mi = 0 & end_ap =一个”
我不能发送,但因为是使用了一些名字两次,像sel_subj(那些是我的字典中的键值)
代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Net.Http;
using System.Net;
namespace ClassChecker
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
methods methods1 = new methods();
public MainWindow()
{
InitializeComponent();
}
private void Button_Click(object sender, RoutedEventArgs e)
{
string temp = methods1.getData2();
Console.ReadLine();
webBrowser.NavigateToString(temp);
}
}
public class methods
{
public string getData2()
{
var cookieContainer = new CookieContainer();
using (var handler = new HttpClientHandler() { CookieContainer = cookieContainer })
using (var client = new HttpClient(handler))
{
client.BaseAddress = new Uri("https://owlexpress.kennesaw.edu");
var values = new Dictionary<string, string>
{
{ "sel_subj", "MATH" },
{ "term_in", "201508" },
{ "sel_day", "dummy"},
{ "sel_schd", "dummy"},
{ "sel_insm", "%"},
{ "sel_camp", "%"},
{ "sel_levl", "%"},
{ "sel_sess", "dummy"},
{ "sel_instr", "%"},
{ "sel_ptrm", "%"},
{ "sel_attr", "dummy"},
{ "sel_crse", "1190" },
{ "sel_title", "" },
{ "sel_from_cred", "" },
{ "sel_to_cred", "" },
{ "begin_hh", "0" },
{ "begin_mi", "0" },
{ "begin_ap", "a" },
{ "end_hh", "0" },
{ "end_mi", "0" },
{ "end_ap", "a" }
};
var content = new FormUrlEncodedContent(values);
cookieContainer.Add(client.BaseAddress, new Cookie("SESSID", "MFlIU0VSMTgxNjYx"));
cookieContainer.Add(client.BaseAddress, new Cookie("BIGipServerowlexpress-all", "2239289986.0.0000"));
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("text/html"));
var result = client.PostAsync("/prodban/bwckschd.p_get_crse_unsec", content).Result;
string resultContent = result.Content.ReadAsStringAsync().Result;
MessageBox.Show(result.Headers.ToString());
return resultContent;
}
}
}
}
根据我们在评论的讨论,你正在发布到服务需要一组与“虚拟”的价值观和其它参数一套ame具有真正的价值。
如果您将NameValueCollection用于进入FormUrlEncodedContent构造函数的参数,您将能够使用重复键。它应该然后工作
感谢您的帮助,我添加了所有的虚拟类型,它的工作原理! – Jrow 2015-03-31 20:36:41
你能够确认(例如与Fiddler)表单POST params不会正确地出去吗?问题可能只是你在请求内容中有错误,而不是请求中的代码... – 2015-03-31 18:56:44
@JimW我在小提琴手中发现了这个,所以我猜这是发给他们的“sel_subj = MATH&term_in = 201508&sel_day = dummy&sel_schd =虚设&sel_insm =%25&sel_camp =%25&sel_levl =%25&sel_sess =虚设&sel_instr =%25&sel_ptrm =%25&sel_attr =虚设&sel_crse = 1190&sel_title =&sel_from_cred =&sel_to_cred =&begin_hh = 0&begin_mi = 0&begin_ap = A&end_hh = 0&end_mi = 0&end_ap =一个” – Jrow 2015-03-31 19:05:39
好的,新的问题。我用了一个可行的浏览器,并得到这个: “term_in = 201508&sel_subj =哑sel_day =哑sel_schd =哑sel_insm =哑sel_camp =哑sel_levl =哑sel_sess =哑sel_instr =哑sel_ptrm =哑sel_attr =哑sel_subj =数学与sel_crse = 1190 sel_title = sel_insm =%25&sel_from_cred = sel_to_cred = sel_camp =% 25&sel_levl =%25&sel_ptrm =%25&sel_instr =%25&begin_hh = 0&begin_mi = 0&begin_ap = a&end_hh = 0&end_mi = 0&end_ap = a“ 虽然我不能发送,因为是两次使用某些名称,比如sel_subj(并且这些都是我的键值字典)。 – Jrow 2015-03-31 19:12:59