有一个网址"https://interface.gta-travel.com/gtaapi/RequestListenerServlet"
我要向他发送一段XML,他会给我返回一段XML
可是现在老报错(远程服务器返回错误: (400) 错误的请求。)代码如下
using System;
using System.Configuration;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;        public static string GetResponseByPost()
        {
            //请求地址
            string postUrl = "https://interface.gta-travel.com/gtaapi/RequestListenerServlet";            //要发送内容
            StringBuilder sb = new StringBuilder();
            sb.Append("<?xml version='1.0' encoding='UTF-8'?>");
            sb.Append("<Request>");
            sb.Append("</Request>");
            string strXML = sb.ToString();            try
            {
                byte[] bytes = Encoding.GetEncoding("GB2312").GetBytes(strXML);                WebRequest webrequest = WebRequest.Create(postUrl);
                webrequest.Method = "POST";
                webrequest.Timeout = 60 * 1000;
                webrequest.ContentType = "text/xml";
                webrequest.ContentLength = bytes.Length;
                Stream oStreamOut = webrequest.GetRequestStream();
                oStreamOut.Write(bytes, 0, bytes.Length);
                oStreamOut.Close();                HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse();
                StreamReader sr = new StreamReader(res.GetResponseStream(), Encoding.GetEncoding("gb2312"));
                string responseData = sr.ReadToEnd();
                return responseData;
            }
            catch (Exception ex)
            {
                throw (ex);
            }
        }----------------------------------------------------------
但是ASP的就可以调通
代码如下
Function PostXmlWebOnline(paraXmlStr)
    On Error Resume Next
    Set objDom = CreateObject("Microsoft.XMLDOM")
    objDom.async = False
    objDom.loadXML paraXmlStr

    '判断XML数据是否装载成功
    If objDom.parseError.errorCode <> 0 Then
             tempErrorStr = objDom.parseError.reason
              PostXmlWebOnline = Replace(resXmlDataStr, tempReplaceStr, tempErrorStr)
              Exit Function
    Else
      Dim strURL
            Set http1 = CreateObject("Microsoft.XMLHTTP")
            strURL = "https://interface.gta-travel.com/gtaapi/RequestListenerServlet"
            'strURL = "https://213.212.78.33/gtaapi/RequestListenerServlet"
            http1.Open "Post", strURL, False
            http1.send objDom             If http1.readyState <> 4 Or http1.Status = "404" Then
                tempErrorStr = "无法找到指定资源"
                PostXmlWebOnline = Replace(resXmlDataStr, tempReplaceStr, tempErrorStr)
                Exit Function
            End If             resXmlDataStr = CStr(http1.responseText)
            Set http1 = Nothing
            'If Err.Number <> 0 Then Err.Clear
            PostXmlWebOnline = resXmlDataStr
   End If
End Function----------------------------------------------------------
我不会弄,谁能帮我看看呀

解决方案 »

  1.   

    建议你把发送给对方的xml先生成文件,看下xml文件格式是否正确
      

  2.   

    发送 XML  接受XML 标准的WebService 为什么不用WebService呢?
      

  3.   


    XML没有问题的。在ASP代码中,好像和dom有关系的样子
    Set objDom = CreateObject("Microsoft.XMLDOM")
    objDom.async = False
    objDom.loadXML paraXmlStr这几步有对应的.net的写法吗?
      

  4.   

    XmlDocument xml_Doc = new XmlDocument();
    xml_Doc.Load(paraXmlStr);
      

  5.   

    那这步呢?
    http1.Open "Post", strURL, False
    http1.send objDom
      

  6.   


    看来你要问的很多,,我把模拟Request请求发给你看看吧,,这个是我当初做的一个模拟Request请求
    自动登陆和下载图片的例子  你应该会用得到ASCIIEncoding encoding = new ASCIIEncoding();
                string param = "?TrackNumber=" + HttpUtility.UrlEncode(return_Value, Encoding.UTF8) + "&LoginName=" + HttpUtility.UrlEncode("doddtest", Encoding.UTF8) + "&PWD=" + HttpUtility.UrlEncode("123456", Encoding.UTF8) + "&AccountNumber=" + HttpUtility.UrlEncode("US11111D08", Encoding.UTF8);
                byte[] data = encoding.GetBytes(param);
                HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://192.168.1.114/DownLoadJPG/Default.aspx" + param);
                request.Method = "POST";
                request.ContentType = "application/x-www-form-urlencoded";
                request.ContentLength = data.Length;
                Stream sm = request.GetRequestStream();
                sm.Write(data, 0, data.Length);
                sm.Close();
                HttpWebResponse response = (HttpWebResponse)request.GetResponse();
                if (response.StatusCode.ToString() != "OK")
                {
                    Response.Write(response.StatusDescription.ToString());
                    return;
                }
                StreamReader myreader = new StreamReader(response.GetResponseStream(), Encoding.UTF8);
                string responseText = myreader.ReadToEnd();
                int start_Int=responseText.IndexOf("href=\"");
                if (start_Int >= 0)
                {
                    int end_Int = responseText.IndexOf(".JPG");
                    string JPG_URL = responseText.Substring(start_Int + 6, end_Int - start_Int - 2);
                    using (WebClient wc = new WebClient())
                    {
                        wc.DownloadFile(JPG_URL, @"D:\" + return_Value + ".JPG");
                    }            }
      

  7.   

    那这步呢?
    http1.Open "Post", strURL, False
    http1.send objDom
    这步真的很关键。我发送的不是字符串,而是一个对象,
    “string param = "?TrackNumber=" ”这个是发送一个字符串
    最起码我是这么理解的麻烦这位朋友帮我看一下吧,谢谢了
      

  8.   

    出现这个错误,是因为你请求的页面出现了异常,才会这样子,导致asp.net检测到http协议错误,所以被抛出异常了,你可以将HttpWebResponse res = (HttpWebResponse)webrequest.GetResponse();
    这条语句改下,如下所示
    HttpWebResponse res =null;
    try{
    res=(HttpWebResponse)webrequest.GetResponse();
    }
    catch(WebException ex){
    res=(HttpWebResponse)ex.Response();
    }
      

  9.   

    res=(HttpWebResponse)ex.Response();
    改成这样子
    res=(HttpWebResponse)ex.Response;这边写错了,这个是属性
      

  10.   

    http1.send objDom
    你要么把他进行序列化   要么 有另一个偷懒的办法DataSet ds = new DataSet();
    ds.readxml(stream); //这里你要注意  他有8种重载 但是没有适合你的 你如果要做 首先就把他换成stream  或者 save 一下  用你保存的路径 传进去也行,,然后把 DataSet传过去,,他本身就是一个 XML  当然这个在WebService里好用 
    至于 Request  我不清楚,,,没用过这种方法 你可以试下
      

  11.   

    HttpWebResponse res = null;
                    try
                    {
                        res = (HttpWebResponse)webrequest.GetResponse();
                    }
                    catch (WebException ex)
                    {
                        res = (HttpWebResponse)ex.Response;
                    }用这个方法貌似可以。请说明一下原因行吗?