Tag: http

HttpClient中“服务器返回无效或无法识别的响应”的含义

在等待HttpClient .PostAsync响应时,我有时会看到一条错误,指出“服务器返回了无效或无法识别的响应” : System.Net.Http.HttpRequestException: An error occurred while sending the request. —> System.Net.Http.WinHttpException: The server returned an invalid or unrecognized response at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.WinHttpHandler.d__105.MoveNext() — End of inner exception stack trace — at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw() at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task) at System.Runtime.CompilerServices.ConfiguredTaskAwaitable`1.ConfiguredTaskAwaiter.GetResult() at System.Net.Http.HttpClient.d__58.MoveNext() 这是一个非常神秘的错误; 我想我可以设想一个“无效”的响应可能是什么(即语法无效的HTTP响应,比如直接跳转到没有状态行的头部的响应),但实际上是对HTTP的“无法识别的”响应请求? 这条消息似乎是无稽之谈。 在引擎盖下,什么情况下实际上可以触发这个错误?

无法使用带有GET请求的动词类型发送内容正文

我目前正通过WebApi收到请求,并试图将其重新发送到另一个站点。 目标是通过示例接收请求: http:// localhost:9999 / #q = test 。 然后将其转发到真实网站:(我的测试我设置了google.com) http://google.com/#q=test 我有以下代码: protected override async Task SendAsync(HttpRequestMessage request, System.Threading.CancellationToken cancellationToken) { string url = request.RequestUri.PathAndQuery; UriBuilder forwardUri = new UriBuilder(_otherWebSiteBase); forwardUri.Path = url; if (request.Method == HttpMethod.Get) { //request.Method = HttpMethod.Post; } request.RequestUri = forwardUri.Uri; request.Headers.Host = forwardUri.Host; return await _client.SendAsync(request, HttpCompletionOption.ResponseHeadersRead);//_client is an HttpClient […]

使用POST请求将JSON发送到Jira API时的System.Net.WebException

好吧,伙计们,我已经在这个问题上挣扎了一天左右,没有明确的解决方案。 我将从例外开始: The remote server returned an error: NotFound. at System.Net.Browser.AsyncHelper.BeginOnUI(SendOrPostCallback beginMethod, Object state) at System.Net.Browser.ClientHttpWebRequest.EndGetResponse(IAsyncResult asyncResult) 我正在尝试连接到JIRA rest API以登录用户。 我们的JIRA系统目前运行4.4.1,我试图访问的API信息在此处记录: https : //developer.atlassian.com/static/rest/jira/4.4.1.html 。 (请参阅“/ auth / 1 / session”API的POST请求) API调用POST请求,其中包含用户凭据的JSON正文。 我已尝试手动构建JSON,以及使用JSON库,结果是相同的。 我发送的json是: { “username”: “test”, “password”: “test” } 我试图将内容类型和编码更改为我能想象的任何内容。 这包括“text / json”,“application / json”,将Encoding.UTF8添加到流编写器等。所有结果都是相同的。 也许这整个考验中最令人沮丧的部分是,我能够立刻用Java for Android编写这个,所以我不认为这是一个API误解,就像Windows Phone 8和/或C#一样误解。 最后要指出的几点: 如果我更改代码以使用GET请求,请指向“http://www.google.com”,并删除请求回调(直接跳到响应),一切正常,我得到了我期望的结果。 我对HttpWebRequest的“BeginX”“EndX”方法感到困惑。 我理解异步任务,但不完全是C#如何管理它。 […]

带有自定义标头的Windows Phone 8 Http请求

我想从Windows Phone 8向WCF服务器发送HTTP PUT请求,为了识别,我必须发送自定义标头。 (假设“mycustomheader”=“abc”) 到目前为止我使用的是WebClient ,但是Webclient.Headers似乎没有Add方法,因此除了HttpRequestHeader枚举中的标题之外,不可能发送标题。 有没有办法用WebClient做到这一点? 我看到可以使用HttpWebRequest类设置自定义标头,但我根本无法让它做任何事情。 我的测试代码(基本上是从http://msdn.microsoft.com/en-us/library/system.net.httpwebrequest.begingetrequeststream.aspx复制的样本): public void dosth() { HttpWebRequest wr = (HttpWebRequest)WebRequest.Create(“http://mycomputer/message”); wr.Method = “PUT”; wr.ContentType = “application/x-www-form-urlencoded”; wr.BeginGetRequestStream(new AsyncCallback(GetRequestStreamCallback), wr); allDone.WaitOne(); } private static void GetRequestStreamCallback(IAsyncResult asynchronousResult) { HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState; Stream postStream = request.EndGetRequestStream(asynchronousResult); string postData = “{‘Command’: { ‘RequestType’ : ‘Status’, ‘Test’ : ‘1’ }}”; […]

从服务器解析UTF8 JSON响应

我正面临一个从我的服务器解析JSON响应的奇怪问题。 在过去几个月以这种方式获得响应(使用Content-Type:text / html)时,它一直运行良好: string response = “”; using (var client = new System.Net.Http.HttpClient()) { var postData = new System.Net.Http.FormUrlEncodedContent(data); var clientResult = await client.PostAsync(url, postData); if(clientResult.IsSuccessStatusCode) { response = await clientResult.Content.ReadAsStringAsync(); } } //Parse the response to a JObject… 但是当收到Content-Type:text / html的回复时; charset = utf8会抛出Content-Type无效的exception。 Exception message: The character set provided in ContentType is […]

将http请求发送到服务器而不期待响应

我需要向服务器发送POST http请求,但它不应该期待响应。 我应该用什么方法呢? 我一直在用 WebRequest request2 = WebRequest.Create(“http://local.ape-project.org:6969”); request2.Method = “POST”; String sendcmd = “[{\”cmd\”:\”SEND\”,\”chl\”:3,\”params\”:{\”msg\”:\”Helloworld!\”,\”pipe\”:\”” + sub1 + “\”},\”sessid\”:\”” + sub + “\”}]”; byte[] byteArray2 = Encoding.UTF8.GetBytes(sendcmd); Stream dataStream2 = request2.GetRequestStream(); dataStream2.Write(byteArray2, 0, byteArray2.Length); dataStream2.Close(); WebResponse response2 = request2.GetResponse(); 发送请求并获得回复。 如果请求将从服务器返回响应,这可以正常工作。 但是,根据我的需要,我只需要发送一个POST请求。 并且没有与我发送的请求相关的响应。 我该怎么做 ? 如果我使用request2.GetRespnse()命令,我收到“连接意外关闭”的错误 任何帮助将不胜感激。 谢谢

使用c#/ ASP.NET以编程方式伪造登录到网站

因此,我正在尝试模拟多个登录,同时在我们的公司网站上生成exception,以便测试我们的日志框架(我们认为可能存在线程同步问题)。 无论如何,所以我需要以编程方式登录我们的网站。 这是我到目前为止所拥有的: // Block 1 Uri url = new Uri(“http://withheld”); HttpWebRequest request = WebRequest.Create(url) as HttpWebRequest; request.Method = “GET”; HttpWebResponse response = request.GetResponse() as HttpWebResponse; string viewState = string.Empty; string previousPage = string.Empty; string eventValidation = string.Empty; using (StreamReader reader = new StreamReader(response.GetResponseStream())) { string strResponse = reader.ReadToEnd(); viewState = HttpUtility.UrlEncode(GetTagValue(strResponse, “__VIEWSTATE”)); previousPage = […]

Vimeo上传。 无法获得complete_uri字段作为响应

我上传到vimeo时,我一直在摆弄。 我已经提出了票证请求。 我上传了这个文件。 我已经检查了文件是否上传了。 我需要使用我应该从我的票中得到的complete_uri响应来运行DELETE方法。 但是,我没有从故障单响应中收到任何complete_URI。 这是我的代码: public static dynamic GenerateTicket() { const string apiUrl = “https://api.vimeo.com/me/videos?type=streaming”; var req = (HttpWebRequest)WebRequest.Create(apiUrl); req.Accept = “application/vnd.vimeo.*+json;version=3.0”; req.Headers.Add(HttpRequestHeader.Authorization, “bearer ” + AccessToken); req.Method = “POST”; var res = (HttpWebResponse)req.GetResponse(); var dataStream = res.GetResponseStream(); var reader = new StreamReader(dataStream); var result = Json.Decode(reader.ReadToEnd()); return result; } 这个回复给了我: 形成 TICKET_ID […]

如何拦截Http流量

我正在尝试开发一个C#应用程序,它将拦截传出的Http请求并将结果返回给旧系统。 我们有一个遗留系统,它向已停产的Web服务发出Http请求。 我需要拦截即将发出的请求并将其发送到新的Web服务。 当响应返回时,我需要操纵它然后将其发送到遗留系统。 所有代码都需要位于客户端计算机上。 我认为http听众的方式可行,但我没有得到任何结果,任何建议将不胜感激。

默认情况下发送BASIC auth,而不是等待HTTP 401

我有一个Web服务,要求BASIC身份validation标头出现在请求中,否则服务将返回HTTP 401(未经授权)。 这样做 – 当挑战回来时,浏览器(在这种情况下,Chrome)弹出并要求提供凭据。 然后保存它们以备将来请求。 我的问题是,现在对服务的每个后续请求都有两个请求 – 一个没有auth(接收401),然后浏览器立即在头中回复正确的auth。 有没有办法强制浏览器(可能通过一个特殊的标题)提供凭据,而不必每次都被Web服务明确询问?