Dzwonię do API hostowanego na serwerze Apache w celu publikowania danych. Używam HttpWebRequest do wykonania POST w języku C#.GetRequestStream() zwraca wyjątek podczas wysyłania danych do adresu URL HTTPS
Interfejs API ma zarówno normalny port HTTP, jak i warstwę zabezpieczoną (HTTPS) na serwerze. Kiedy wołam URL HTTP, działa doskonale. Jednak, gdy wywołuję HTTPS, daje mi to wyjątek time-out (przy funkcji GetRequestStream()). Wszelkie spostrzeżenia? Używam VS 2010, .Net framework 3.5 i C#. Oto fragment kodu:
string json_value = jsonSerializer.Serialize(data);
HttpWebRequest request = (HttpWebRequest)System.Net.WebRequest.Create("https://server-url-xxxx.com");
request.Method = "POST";
request.ProtocolVersion = System.Net.HttpVersion.Version10;
request.ContentType = "application/x-www-form-urlencoded";
byte[] buffer = Encoding.ASCII.GetBytes(json_value);
request.ContentLength = buffer.Length;
System.IO.Stream reqStream = request.GetRequestStream();
reqStream.Write(buffer, 0, buffer.Length);
reqStream.Close();
EDIT: Program Konsola sugerowane przez Piotra działa dobrze. Ale kiedy dodaję dane (w formacie JSON), które muszą być wysłane do interfejsu API, wygasza wyjątek przekroczenia czasu operacji. Oto kod, który dodaję do aplikacji bazującej na konsoli i generuje błąd.
byte[] buffer = Encoding.ASCII.GetBytes(json_value);
request.ContentLength = buffer.Length;
możesz spróbować bez ProtocolVersion i ContentType – Peter
dostać również Wireshark i rzucić okiem na to, co dzieje się przez przewód. sprawdź, czy serwer docelowy akceptuje połączenia międzydomenowe. – Peter
Dzięki Peter. Dodałem ProtocolVersion i ContentType, ale wygląda na to, że to nie pomogło. Sprawdzę za pomocą wireshark, ale ponieważ aplikacja Python może łatwo GET/POST to API Wierzę, że serwer akceptuje połączenia międzydomenowe. – Wiz