このコードは期待どおりに機能することがわかりました。
var url = "https://limal.info/efulfilment.php";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var alternativeAnswer = Encoding.UTF8.GetString(new WebClient().UploadValues(url, new NameValueCollection() { { "xml", "test" } }));
ただし、次のコードは頭痛の種になります。
var url = "https://limal.info/efulfilment.php";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var request = (HttpWebRequest)WebRequest.Create(url);
request.ContentType = "application/x-www-form-urlencoded";
request.Method = "POST";
request.Timeout = 5000; // I added this for you, so you only need to wait 5 sec...
using (var requestStream = request.GetRequestStream())
{
var writer = new StreamWriter(requestStream);
writer.Write("xml=test");
}
using (var response = request.GetResponse())
{
using (var responseStream = response.GetResponseStream())
{
var reader = new StreamReader(responseStream);
var answer = reader.ReadToEnd();
}
}
どういうわけか投稿パラメーターが認識されず、応答が返されます。
"limal.info bridge error: Missing 'xml' variable in post request."
(正しい答えは、テストが無効な XML であるため、XML データの形式が間違っているということです...)
次の問題に進みます。
別の URL を使用すると、タイムアウト例外が発生します。次のコードのUploadValuesでハングします。(HttpWebRequest を使用する他の例は、私も試した GetResponseでハングします。)
var url = "https://sys.efulfilment.de/rt/";
ServicePointManager.ServerCertificateValidationCallback = delegate { return true; };
var alternativeAnswer = Encoding.UTF8.GetString(new WebClient().UploadValues(url, new NameValueCollection() { { "xml", "test" } }));
ここや他のサイトで同様の問題について読みました。SSL で Http POST を使用すると、.NET で問題が発生するようです。
どうして??:(