【问题标题】:HttpClient PostAsync Invalid Post FormatHttpClient PostAsync 无效的帖子格式
【发布时间】:2017-07-21 03:18:41
【问题描述】:

我正在尝试使用 HttpClient 的 PostAsync 登录网站;但是它总是失败,当我使用 WireShark 跟踪连接时,我发现它错误地发布了数据

代码

var content = new FormUrlEncodedContent(new[] 
{
    new KeyValuePair<string, string>("value1", data1),
    new KeyValuePair<string, string>("value2", data2),
    new KeyValuePair<string, string>("value3", data3)
});

var content = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("value1", data1), 
    new KeyValuePair<string, string>("value2", data2), 
    new KeyValuePair<string, string>("value3", data3)
};

用法

httpClient.PostAsync(postUri, content)

期望

value1=123456&value2=123456&value3=123456

现实

//It adds strange += which makes the post fail...
value1=123456&value2+=123456&value3+=123456

【问题讨论】:

  • 参数名称后面是否有空格被 url 编码为+
  • @Jason P 我会重新检查

标签: c# httpclient


【解决方案1】:

我知道这行得通:

var values = new List<KeyValuePair<string, string>>();

values.Add(new KeyValuePair<string, string>("Item1", "Value1"));
values.Add(new KeyValuePair<string, string>("Item2", "Value2"));
values.Add(new KeyValuePair<string, string>("Item3", "Value3"));

using (var content = new FormUrlEncodedContent(values))
{
    client.PostAsync(postUri, content).Result)
}

【讨论】:

  • 但我看不出这与我发布的代码有什么区别,但我会试一试
  • 我同意,没有区别,这就是重点,我知道这段代码有效。您应该寻找值的差异:)
  • :D 错误是我不是 httpClient :D 正如 Jason P 所说,我的参数名称中有一个空格。无论如何,非常感谢您的帮助。
【解决方案2】:

为可能的空格修剪参数。空格导致 +

var content = new List<KeyValuePair<string, string>>
{
    new KeyValuePair<string, string>("value1", data1.Trim()), 
    new KeyValuePair<string, string>("value2", data2.Trim()), 
    new KeyValuePair<string, string>("value3", data3.Trim())
};

【讨论】:

    【解决方案3】:

    在我看来这更好看:

    var variables = new Dictionary<string, string>() {
        { "value1", value1 },
        { "value2", value2 }
    };
    var content = new FormUrlEncodedContent(variables);
    

    并且字典可以在加载时检查重复的值,除非你需要重复的键...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      相关资源
      最近更新 更多