有一个网址"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----------------------------------------------------------
我不会弄,谁能帮我看看呀
我要向他发送一段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----------------------------------------------------------
我不会弄,谁能帮我看看呀
XML没有问题的。在ASP代码中,好像和dom有关系的样子
Set objDom = CreateObject("Microsoft.XMLDOM")
objDom.async = False
objDom.loadXML paraXmlStr这几步有对应的.net的写法吗?
xml_Doc.Load(paraXmlStr);
http1.Open "Post", strURL, False
http1.send objDom
看来你要问的很多,,我把模拟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");
} }
http1.Open "Post", strURL, False
http1.send objDom
这步真的很关键。我发送的不是字符串,而是一个对象,
“string param = "?TrackNumber=" ”这个是发送一个字符串
最起码我是这么理解的麻烦这位朋友帮我看一下吧,谢谢了
这条语句改下,如下所示
HttpWebResponse res =null;
try{
res=(HttpWebResponse)webrequest.GetResponse();
}
catch(WebException ex){
res=(HttpWebResponse)ex.Response();
}
改成这样子
res=(HttpWebResponse)ex.Response;这边写错了,这个是属性
你要么把他进行序列化 要么 有另一个偷懒的办法DataSet ds = new DataSet();
ds.readxml(stream); //这里你要注意 他有8种重载 但是没有适合你的 你如果要做 首先就把他换成stream 或者 save 一下 用你保存的路径 传进去也行,,然后把 DataSet传过去,,他本身就是一个 XML 当然这个在WebService里好用
至于 Request 我不清楚,,,没用过这种方法 你可以试下
try
{
res = (HttpWebResponse)webrequest.GetResponse();
}
catch (WebException ex)
{
res = (HttpWebResponse)ex.Response;
}用这个方法貌似可以。请说明一下原因行吗?