C#HttpClient不发送POST变量

C#HttpClient不发送POST变量,c#,post,dotnet-httpclient,C#,Post,Dotnet Httpclient,我正在尝试制作一个应用程序,该应用程序将发送一个POST请求,其中包含一些信息,并返回一个类列表 你可以在这里搜索“我在使用2015年秋季数学课程1190”。 当我运行下面的代码时,它将返回的内容输出到一个字符串,该字符串进入webbrowser组件。它表明: Class Schedule Search Fall Semester 2015 Mar 31, 2015 Stop You must select at least ONE subject . 我使用Chrome调试来查找

我正在尝试制作一个应用程序,该应用程序将发送一个POST请求,其中包含一些信息,并返回一个类列表

你可以在这里搜索“我在使用2015年秋季数学课程1190”。

当我运行下面的代码时,它将返回的内容输出到一个字符串,该字符串进入webbrowser组件。它表明:

Class Schedule Search    
Fall Semester 2015
Mar 31, 2015
Stop You must select at least ONE subject . 
我使用Chrome调试来查找POST值,并将它们设置为正常使用站点时的状态。我甚至还放了一些饼干,以防需要

编辑:

好,新的一期。我使用了一个有效的浏览器,得到了这样的结果:“term_in=201508&sel_subj=dummy&sel_day=dummy&sel_schd=dummy&sel_insm=dummy&sel_c‌​amp=虚拟和选择等级=虚拟和选择等级=虚拟和选择仪表=虚拟和选择等级=虚拟和选择等级=虚拟和选择属性=d‌​ummy&sel_subc=MATH&sel_crse=1190&sel_title=&sel_insm=%25&sel_from_cred=&sel_to_cr‌​ed=&sel\U camp=%25&sel\U levl=%25&sel\U ptrm=%25&sel\U instr=%25&begin\U hh=0&begin\U mi=0&be‌​gin_ap=a&end_hh=0&end_mi=0&end_ap=a“

但我不能发送,因为is使用了一些名称两次,比如sel_subj(这些是我在字典中的键值)

代码:

使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
使用System.Windows;
使用System.Windows.Controls;
使用System.Windows.Data;
使用System.Windows.Documents;
使用System.Windows.Input;
使用System.Windows.Media;
使用System.Windows.Media.Imaging;
使用System.Windows.Navigation;
使用System.Windows.Shapes;
使用System.Net.Http;
Net系统;
命名空间类检查器
{
/// 
///MainWindow.xaml的交互逻辑
/// 
公共部分类主窗口:窗口
{
方法1=新方法();
公共主窗口()
{
初始化组件();
}
私有无效按钮\u单击(对象发送者,路由目标e)
{            
字符串temp=methods1.getData2();
Console.ReadLine();
webBrowser.NavigateToString(临时);
}
}
公共类方法
{
公共字符串getData2()
{
var cookieContainer=新的cookieContainer();
使用(var handler=new-HttpClientHandler(){CookieContainer=CookieContainer})
使用(var客户端=新的HttpClient(处理程序))
{
client.BaseAddress=新Uri(“https://owlexpress.kennesaw.edu");
var值=新字典
{
{“sel_subj”,“MATH”},
{“term_in”,“201508”},
{“sel_day”,“dummy”},
{“sel_schd”,“dummy”},
{“sel_insm”,“%”,
{“Selu营地”、“%”},
{“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内容=新的FormUrlEncodedContent(值);
添加(client.BaseAddress,新Cookie(“sessiond”,“MFlIU0VSMTgxNjYx”);
添加(client.BaseAddress,新Cookie(“BIGipServerowlexpress all”,“2239289986.0.0000”);
client.DefaultRequestHeaders.Accept.Add(新的System.Net.Http.Headers.MediaTypeWithQualityHeaderValue(“text/html”);
var result=client.PostAsync(“/prodban/bwckshd.p\u get\u crse\u unsec”,content);
字符串resultContent=result.Content.ReadAsStringAsync().result;
Show(result.Headers.ToString());
返回结果内容;
}
}
}
}

根据我们在评论中的讨论,您发布到的服务需要一组具有“虚拟”值的参数和另一组具有真实值的相同参数


如果对进入FormUrlEncodedContent构造函数的参数使用NameValueCollection,则可以使用重复键。然后它应该会工作

您是否能够确认(如使用Fiddler)form POST参数没有正确运行?问题可能只是你的请求内容有问题,而不是发出请求的代码有问题…@JimW我在fiddler中找到了这个,所以我猜它是在发送它们“sel_subc=MATH&term_in=201508&sel_day=dummy&sel_schd=dummy&sel insm=%25&sel_camp=%25&sel_sess=dummy&sel_instr=%25&sel_ptrm=%25&sel_attr=dummy&sel_crse=1190&sel_title=&sel_from_cred=&sel_cred=&begin=&begin&begin&begin&begin&begin&begin&begin&begin&begin&begin&begin&begin=0使用了一个新版本的浏览器:”2010年10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10日,8月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10日,8月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10月10日,8日&end\u hh=0&end\u mi=0&end_ap=a“我不能发送,因为is使用了一些名称两次,比如sel_subj(这些是我在字典中的键值)。我怀疑这些伪值是否被考虑在内,它们可能被忽略(因为它们是第一个).你是否尝试过使用自己的HTML表单来获得正确的请求?例如,我开始为你填写字段的其余部分。Leh,我做了这个,但在这里也不起作用:谢谢你的帮助,我添加了所有的虚拟类型,它起作用了!
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;
        }

    }

}

}