【问题标题】:How to post a request to Java servlet from .net如何从 .net 向 Java servlet 发布请求
【发布时间】:2017-02-14 06:30:39
【问题描述】:

如何将以下数据发布到 servlet url:

数据:

enc_request=63957FB55DD6E7B968A7588763E08B240878046EF2F520C44BBC63FB9CCE726209A4734877F5904445591304ABB2F5E598B951E39EAFB9A24584B00590ADB077ADE5E8C444EAC5A250B1EA96F68D22E44EA2515401C2CD753DBA91BD0E7DFE7341BE1E7B7550&access_code=8JXENNSSBEZCU8KQ&command=confirmOrder&request_type=XML&response_type=XML&version=1.1

网址:

"https://logintest.ccavenue.com/apis/servlet/DoWebTrans";

我试过 https://social.msdn.microsoft.com/Forums/vstudio/en-US/df76fbfa-2931-4c9f-8671-785307243f62/post-request-to-a-java-servlet-and-process-httpresponse-using-net?forum=wcf 。但我得到了错误:C# System.Net.WebException: The underlying connection was closed: An unexpected error occurred on a send

下面是我的代码:

                 StringBuilder sbQueryString = new StringBuilder();
                 CCACrypto ccaCrypto = new CCACrypto();
                 string workingKey = "14A246E9D4341159638AC8EB776F3BE6";

//put     in the   32bit alpha numeric key in the quotes provided here

                sbQueryString.Append("enc_request=");
                sbQueryString.Append(ccaCrypto.Encrypt(GenerateOrderXml(appointmentId), workingKey));
                sbQueryString.Append("&");
                sbQueryString.Append("access_code=");
                sbQueryString.Append("AVQJ68DL46BW00JQWB");
                sbQueryString.Append("&");
                sbQueryString.Append("Command=");
                sbQueryString.Append("cancelOrder");
                sbQueryString.Append("&");
                sbQueryString.Append("request_type=XML&response_type=XML");
                sbQueryString.Append("&");
                sbQueryString.Append("version=1.1");
                //Response.Redirect("../ccAvenue/ccavAPIHandler.aspx?" + sbQueryString.ToString(), false);

                //string url = "https://logintest.ccavenue.com/apis/servlet/DoWebTrans";
                string url = "https://180.179.175.17/apis/servlet/DoWebTrans";

                // Create a request using a URL that can receive a post.   
                WebRequest request = WebRequest.Create(url);
                // Set the Method property of the request to POST.  
                request.Method = "POST";
                // Create POST data and convert it to a byte array.  
                string postData = sbQueryString.ToString();
                byte[] byteArray = Encoding.UTF8.GetBytes(postData);
                // Set the ContentType property of the WebRequest.  
                request.ContentType = "application/x-www-form-urlencoded";
                // Set the ContentLength property of the WebRequest.  
                request.ContentLength = byteArray.Length;
                // Get the request stream.  
                Stream dataStream = request.GetRequestStream();
                // Write the data to the request stream.  
                dataStream.Write(byteArray, 0, byteArray.Length);
                // Close the Stream object.  
                dataStream.Close();
                // Get the response.  
                WebResponse response = request.GetResponse();
                // Display the status.  
                Console.WriteLine(((HttpWebResponse)response).StatusDescription);
                // Get the stream containing content returned by the server.  
                dataStream = response.GetResponseStream();
                // Open the stream using a StreamReader for easy access.  
                StreamReader reader = new StreamReader(dataStream);
                // Read the content.  
                string responseFromServer = reader.ReadToEnd();
                // Display the content.  
                Console.WriteLine(responseFromServer);
                // Clean up the streams.  
                reader.Close();
                dataStream.Close();
                response.Close();

【问题讨论】:

  • 我收到 503 错误 - 服务不可用。此错误与您发布请求的方式无关。

标签: c# .net ccavenue


【解决方案1】:

您可以尝试使用WebClient 来简化您的代码:

using (var client = new WebClient())
{
    var data = new NameValueCollection
    {
        { "enc_request", "63957FB55DD6E7B968A7588763E08B240878046EF2F520C44BBC63FB9CCE726209A4734877F5904445591304ABB2F5E598B951E39EAFB9A24584B00590ADB077ADE5E8C444EAC5A250B1EA96F68D22E44EA2515401C2CD753DBA91BD0E7DFE7341BE1E7B7550" },
        { "access_code", "8JXENNSSBEZCU8KQ" },
        { "command", "confirmOrder" },
        { "request_type", "XML" },
        { "response_type", "XML" },
        { "version", "1.1" },
    };
    var url = "https://logintest.ccavenue.com/apis/servlet/DoWebTrans";
    byte[] result = client.UploadValues(url, data);
}

【讨论】:

  • 我尝试了这个,但我仍然收到错误:C# System.Net.WebException: 底层连接已关闭:发送时发生意外错误
  • 那么,服务器可能有问题。也许如果发送了一些无效参数,服务器会关闭连接。您可能需要查阅您正在使用的远程服务的文档。客户端代码没问题。
猜你喜欢
  • 1970-01-01
  • 2013-10-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-06-08
  • 2016-01-19
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多