SendAsync(httpclient)因InnerException而失败 - "底层连接已关闭:发送时出现意外错误。",但Fiddler没有

时间:2017-01-31 05:02:39

标签: c# fiddler dotnet-httpclient

我看到这些帖子,但他们没有成功:

您可以在此处找到完整的代码:https://github.com/te2020/GoEuroAPiClassLibrary/blob/master/GOEuroApi_Requests.cs

只有相关部分(我认为):

httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept", "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
            httpClient.DefaultRequestHeaders.TryAddWithoutValidation("Accept-Encoding", "gzip, deflate");
            httpClient.DefaultRequestHeaders.TryAddWithoutValidation("User-Agent", "Mozilla/5.0 (Windows NT 6.3; WOW64; rv:50.0) Gecko/20100101 Firefox/50.0");

            httpClient.BaseAddress = new Uri("https://www.goeuro.com/");


            HttpRequestMessage request = new HttpRequestMessage(HttpMethod.Post, "/GoEuroAPI/rest/api/v5/searches");
            request.Content = new StringContent(jsonString,
                                                Encoding.UTF8,
                                                "application/json");//CONTENT-TYPE header

我的小提琴手看起来像this而且有效。

发送该请求后我收到了错误消息:

 var response = await httpClient.SendAsync(request);

我错过了什么?

1 个答案:

答案 0 :(得分:1)

如果您使用HTTP作为请求(而不是HTTPS),您可以从服务器看到更有用的响应:

{"message":"Search options are not correct!","statusCode":400}

这似乎表明您发送的searchOptions JSON由于某种原因无效。在不知道goeuro API的情况下,我无法说出确切的问题是什么。不幸的是,我没有时间去探索它。

我会做的是使用小提琴手比较'用于将您的工作请求与来自您的程序的请求进行比较的工具。只需在Fiddler中选择两个请求并右键单击 - >相比。然后尝试使您的请求与工作请求完全相同。我注意到工作请求中有cookie,你可能没有发送,你应该添加。