C# HTTP POST。。发送和XMLQuery并返回文本文件作为响应
我有个问题。我正在尝试通过asp.net访问一些web服务。我并没有确切的网络服务代码。web服务的输入是XML查询,如下所示。输出将在文本文件或Excel文件中请求列和值C# HTTP POST。。发送和XMLQuery并返回文本文件作为响应,c#,post,C#,Post,我有个问题。我正在尝试通过asp.net访问一些web服务。我并没有确切的网络服务代码。web服务的输入是XML查询,如下所示。输出将在文本文件或Excel文件中请求列和值 --**eXtraSheet** Content-Disposition: form-data; name="xmlquery" <?xml version="1.0" encoding="UTF-8" standalone="no"?><xmlquery> <showcolumns tru
--**eXtraSheet**
Content-Disposition: form-data; name="xmlquery"
<?xml version="1.0" encoding="UTF-8" standalone="no"?><xmlquery> <showcolumns truncation="999"> <column order="1">nmclob</column> <column order="2">oweroperategroup</column> <column order="3">id</column> <column order="4">name</column> <column order="5">appquestid</column> <column order="6">appquestname</column> <column order="7">appquestinstanceid</column> <column order="8">appquestinstancename</column> <column order="9">tgo</column> <column order="10">active</column> </showcolumns> <showaggregatecolumns/><groupby/><orderby/> <filters> <filter condition="AND" id="appquestid" leftbracket="" operator="EQUAL" rightbracket="">25299</filter> </filters> <fullcontentsearch/></xmlquery>
--**eXtraSheet**
这里是我调用异步方法的地方
private static void GetRequestStreamCallback1(IAsyncResult asynchronousResult)
{
HttpWebRequest request1 = (HttpWebRequest)asynchronousResult.AsyncState;
Stream postStream = request1.EndGetRequestStream(asynchronousResult);
byte[] bytearray = Encoding.UTF8.GetBytes(Constants.Constants.PostdataString.ToString());
postStream.Write(bytearray, 0, Constants.Constants.PostdataString.Length);
postStream.Close();
// Start the asynchronous operation to get the response
request1.BeginGetResponse(new AsyncCallback(GetResponseCallback), request1);
}
及回应
private static void GetResponseCallback(IAsyncResult asynchronousResult)
{
HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;
// End the operation
HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(asynchronousResult);
Stream streamResponse = response.GetResponseStream();
StreamReader streamRead = new StreamReader(streamResponse);
string responseString = streamRead.ReadToEnd();
// Close the stream object
streamResponse.Close();
streamRead.Close();
// Release the HttpWebResponse
response.Close();
allDone.Set();
}
现在,如果我检查响应字符串。。我正在收到完整的HTML格式的aspx内容。如下图所示
<LINK href="custom/css/flexiblereporting.css" rel="stylesheet" type="text/css">
<script type="text/javascript" src="/js/prototype1.5.js"></script>
<script type="text/javascript" src="/js/ZeroClipboard.js"></script>
<script type="text/javascript" src="/js/genericclipboardcopy.js"></script>
<script>
document.title="Flexible Reporting";
function selectAll(list, el){
//alert(list);
value=el.checked;
//var check=document.getElementById(id);
//check.checked=true;
//check.checked=false;
while(list.indexOf("|") != -1 && list.length!=1){
id=list.substring(0,list.indexOf("|"));
//alert(id);
if(value==true){
var check=document.getElementById("share"+id);
check.checked=true;
}else{
var check=document.getElementById("share"+id);
check.checked=false;
}
list=list.substring(list.indexOf("|")+1,list.length);
}
}
function getReport(el){
idView=el.value;
if(idView>-1){
//alert(idView);
document.location.href="uview?call=dg.reporting.custom.RHFRAlacrity&action=editreport&viewid="+idView;
}
}
function getSummary(baseviewfilter,reportsfilter){
var createnewreport=$("createnewreport");
var loading=$("loading");
createnewreport.style.display="none";
loading.style.display="";
document.location.href="uview?call=dg.reporting.custom.RHFRAlacrity&action=summary&reportsfilter="+reportsfilter+"&baseviewfilter="+baseviewfilter;
}
function getSummaryExtra(baseviewfilter,reportsfilter,extra){
var createnewreport=$("createnewreport");
var loading=$("loading");
createnewreport.style.display="none";
loading.style.display="";
document.location.href="uview?call=dg.reporting.custom.RHFRAlacrity&action=summary&reportsfilter="+reportsfilter+"&baseviewfilter="+baseviewfilter+"&"+extra;
}
document.title=“灵活报告”;
功能selectAll(列表,el){
//警报(列表);
值=检查的el;
//var check=document.getElementById(id);
//check.checked=true;
//check.checked=false;
while(list.indexOf(“|”)为-1&&list.length!=1){
id=list.substring(0,list.indexOf(“|”);
//警报(id);
如果(值==true){
var check=document.getElementById(“共享”+id);
check.checked=true;
}否则{
var check=document.getElementById(“共享”+id);
check.checked=false;
}
list=list.substring(list.indexOf(“|”)+1,list.length);
}
}
函数getReport(el){
idView=el.value;
如果(idView>-1){
//警报(idView);
document.location.href=“uview?call=dg.reporting.custom.rhfralacity&action=editreport&viewid=“+idView;
}
}
函数getSummary(baseviewfilter、reportsfilter){
var createnewreport=$(“createnewreport”);
var加载=$(“加载”);
createnewreport.style.display=“无”;
loading.style.display=“”;
document.location.href=“uview?call=dg.reporting.custom.rhfracity&action=summary&reportsfilter=“+reportsfilter+”&baseviewfilter=“+baseviewfilter;
}
函数getSummaryExtra(baseviewfilter、reportsfilter、extra){
var createnewreport=$(“createnewreport”);
var加载=$(“加载”);
createnewreport.style.display=“无”;
loading.style.display=“”;
document.location.href=“uview?call=dg.reporting.custom.rhfracity&action=summary&reportsfilter=“+reportsfilter+”&baseviewfilter=“+baseviewfilter+”&“+extra;
}
有人能解释一下吗
下面是JAVA代码
private List<String> callAlacrityService(String serverURL, String postData)
{
boolean _verbose = false; // for debug, set to true
boolean finalOk = false;
ArrayList<String> al = new ArrayList<String>();
boolean isPostRequest = goodStr(postData);
DataOutputStream outputStream = null;
BufferedReader datain = null;
InputStreamReader isr = null;
//boolean responseErrorDetected = false;
try {
URL url = new URL(serverURL);
//20091014 w051646 gw-Connection timeouts 1
// Per google, the connection shouldn;t actually connect until we get its stream,
// so setting the timeouts here should work.
// http://stackoverflow.com/questions/39391/does-new-url-openconnection-necessarily-imply-a-post
HttpURLConnection ucUrl = (HttpURLConnection)url.openConnection();
//
if(propTimeoutConnect > 0) { ucUrl.setConnectTimeout(propTimeoutConnect); }
if(propTimeoutRead > 0) { ucUrl.setReadTimeout(propTimeoutRead); }
//
ucUrl.setUseCaches(false);
ucUrl.setDoOutput(true);
if(isPostRequest) {
ucUrl.setRequestMethod("POST");
ucUrl.setRequestProperty("Content-Type", "multipart/form-data; boundary=**eXtraSheet**");
}
else {
ucUrl.setRequestMethod("GET");
}
ucUrl.connect();
//---------------
// if POST, then send the data now
if(isPostRequest) {
outputStream = new DataOutputStream(ucUrl.getOutputStream());
outputStream.writeBytes(postData);
outputStream.flush();
outputStream.close();
outputStream = null;
}
//---------------
//
// Read response from Alacrity as separate lines, into a list
//
isr = new InputStreamReader(ucUrl.getInputStream());
datain = new BufferedReader(isr);
String line;
if(_verbose) { LOG(" !-------------------------"); }
// zero out our line/char counters before starting read
int lastNumLinesRead = 0;
int lastNumCharsRead = 0;
while((line = datain.readLine()) != null) {
if(_verbose) { LOG(" !" + line); }
//
//TODO: some errors are due to HTTP probs-- 500, 404, etc. Can we get the resp code from response?
//
//-don't do this in normal case as it is a perf issue--//resptext += line;
//
// add line to retval array
al.add(line);
lastNumLinesRead++;
if(line!=null) {
lastNumCharsRead+=line.length();
}
}
// persist status to member vars before logging
lastHttpRc = ucUrl.getResponseCode();
lastHttpRcText = ucUrl.getResponseMessage();
LOG(" !---- rc=[" + lastHttpRc + "][" + lastHttpRcText + "]-----");
LOG(" !---- numLinesRead=[" + lastNumLinesRead + "] numCharsRead=[" + lastNumCharsRead + "]-----");
datain.close();
datain = null;
isr.close();
isr = null;
ucUrl.disconnect();
}
catch (SocketTimeoutException ste) {
// 20091014 w051646 gw-Connection timeouts 1
LOG(" *** SocketTimeoutException on request to Alacrity, failed connection.");
LOG(" *** Timeouts: propTimeoutConnect=["+propTimeoutConnect+"] propTimeoutRead=["+propTimeoutRead+"]");
LOG(" *** " + ste.getMessage());
al = null;
finalOk = false;
}
catch (MalformedURLException e) {
LOG("MalFormedException6 " + e.getMessage());
al = null;
finalOk = false;
}
catch (Exception e) {
LOG("Exception7a: catchall exception in alacrity connect! " + e.getMessage());
al = null;
finalOk = false;
}
finally {
try {
if(outputStream!=null) { outputStream.close(); }
if(datain!=null) {datain.close(); }
if(isr!=null) { isr.close(); }
}
catch(Exception e2) {
LOG(" ##callAlacrityService - exception in finally block! " + e2.getMessage());
}
}
if(al!=null && !al.isEmpty()) {
finalOk = true;
}
return al;
}
私有列表CallaCrityService(String serverURL,String postData)
{
布尔值_verbose=false;//对于调试,设置为true
布尔finalOk=false;
ArrayList al=新的ArrayList();
布尔值isPostRequest=goodStr(postData);
DataOutputStream outputStream=null;
BufferedReader datain=null;
InputStreamReader isr=null;
//布尔值responseErrorDetected=false;
试一试{
URL=新URL(服务器URL);
//20091014 w051646 gw连接超时1
//根据谷歌的说法,在我们得到它的流之前,连接不应该真正连接,
//因此,在这里设置超时应该是可行的。
// http://stackoverflow.com/questions/39391/does-new-url-openconnection-necessarily-imply-a-post
HttpURLConnection ucUrl=(HttpURLConnection)url.openConnection();
//
如果(propTimeoutConnect>0){ucUrl.setConnectTimeout(propTimeoutConnect);}
如果(propTimeoutRead>0){ucUrl.setReadTimeout(propTimeoutRead);}
//
ucUrl.setUseCaches(false);
ucUrl.setDoOutput(true);
如果(isPostRequest){
setRequestMethod(“POST”);
setRequestProperty(“内容类型”,“多部分/表单数据;边界=**外页**”);
}
否则{
setRequestMethod(“GET”);
}
ucUrl.connect();
//---------------
//如果是POST,则立即发送数据
如果(isPostRequest){
outputStream=新的DataOutputStream(ucUrl.getOutputStream());
outputStream.writeBytes(postData);
outputStream.flush();
outputStream.close();
outputStream=null;
}
//---------------
//
//将来自Alacrity的响应作为单独的行读取到列表中
//
isr=新的InputStreamReader(ucUrl.getInputStream());
数据输入=新的缓冲读取器(isr);
弦线;
如果(_verbose){LOG(“!---------------------------”);}
//在开始读取之前,将行/字符计数器归零
int lastNumLinesRead=0;
int lastNumCharsRead=0;
而((line=datain.readLine())!=null){
如果(_verbose){LOG(!“+行);}
//
//TODO:一些错误是由于HTTP probs--500、404等引起的。我们可以从响应中获取响应代码吗?
//
//-在正常情况下不要这样做,因为这是一个性能问题--//resptext+=line;
//
//将行添加到retval数组
al.添加(行);
lastNumLinesRead++;
如果(行!=null){
lastNumCharsRead+=line.length();
}
}
//在记录之前将状态持久化到成员变量
lastHttpRc=ucUrl.getResponseCode();
lastHttpCtext=ucUrl.getResponseMessage();
日志(!----rc=[“+lastHttpRc+”][“+lastHttpCtext+”]----”;
日志(“!----numLinesRead=[”+lastNumLinesRead+“]numCharsRead=[“+lastNumCharsRead+”]----”;
datain.close();
datain=null;
isr.close();
isr=null;
ucUrl.disconnect();
}
捕捉(SocketTimeoutException ste){
//20091014 w051646 gw连接超时1
日志(“***SocketTimeoutException在请求Alacrity时,连接失败。”);
日志(“***超时:propTimeoutConnect=[”+propTimeoutConnect+“]propTimeoutRead=[“+propTimeoutRead+”]);
日志(“***”+ste.getMessage());
al=null;
finalOk=false;
}
捕获(格式错误){
日志(“格式错误”概念
private List<String> callAlacrityService(String serverURL, String postData)
{
boolean _verbose = false; // for debug, set to true
boolean finalOk = false;
ArrayList<String> al = new ArrayList<String>();
boolean isPostRequest = goodStr(postData);
DataOutputStream outputStream = null;
BufferedReader datain = null;
InputStreamReader isr = null;
//boolean responseErrorDetected = false;
try {
URL url = new URL(serverURL);
//20091014 w051646 gw-Connection timeouts 1
// Per google, the connection shouldn;t actually connect until we get its stream,
// so setting the timeouts here should work.
// http://stackoverflow.com/questions/39391/does-new-url-openconnection-necessarily-imply-a-post
HttpURLConnection ucUrl = (HttpURLConnection)url.openConnection();
//
if(propTimeoutConnect > 0) { ucUrl.setConnectTimeout(propTimeoutConnect); }
if(propTimeoutRead > 0) { ucUrl.setReadTimeout(propTimeoutRead); }
//
ucUrl.setUseCaches(false);
ucUrl.setDoOutput(true);
if(isPostRequest) {
ucUrl.setRequestMethod("POST");
ucUrl.setRequestProperty("Content-Type", "multipart/form-data; boundary=**eXtraSheet**");
}
else {
ucUrl.setRequestMethod("GET");
}
ucUrl.connect();
//---------------
// if POST, then send the data now
if(isPostRequest) {
outputStream = new DataOutputStream(ucUrl.getOutputStream());
outputStream.writeBytes(postData);
outputStream.flush();
outputStream.close();
outputStream = null;
}
//---------------
//
// Read response from Alacrity as separate lines, into a list
//
isr = new InputStreamReader(ucUrl.getInputStream());
datain = new BufferedReader(isr);
String line;
if(_verbose) { LOG(" !-------------------------"); }
// zero out our line/char counters before starting read
int lastNumLinesRead = 0;
int lastNumCharsRead = 0;
while((line = datain.readLine()) != null) {
if(_verbose) { LOG(" !" + line); }
//
//TODO: some errors are due to HTTP probs-- 500, 404, etc. Can we get the resp code from response?
//
//-don't do this in normal case as it is a perf issue--//resptext += line;
//
// add line to retval array
al.add(line);
lastNumLinesRead++;
if(line!=null) {
lastNumCharsRead+=line.length();
}
}
// persist status to member vars before logging
lastHttpRc = ucUrl.getResponseCode();
lastHttpRcText = ucUrl.getResponseMessage();
LOG(" !---- rc=[" + lastHttpRc + "][" + lastHttpRcText + "]-----");
LOG(" !---- numLinesRead=[" + lastNumLinesRead + "] numCharsRead=[" + lastNumCharsRead + "]-----");
datain.close();
datain = null;
isr.close();
isr = null;
ucUrl.disconnect();
}
catch (SocketTimeoutException ste) {
// 20091014 w051646 gw-Connection timeouts 1
LOG(" *** SocketTimeoutException on request to Alacrity, failed connection.");
LOG(" *** Timeouts: propTimeoutConnect=["+propTimeoutConnect+"] propTimeoutRead=["+propTimeoutRead+"]");
LOG(" *** " + ste.getMessage());
al = null;
finalOk = false;
}
catch (MalformedURLException e) {
LOG("MalFormedException6 " + e.getMessage());
al = null;
finalOk = false;
}
catch (Exception e) {
LOG("Exception7a: catchall exception in alacrity connect! " + e.getMessage());
al = null;
finalOk = false;
}
finally {
try {
if(outputStream!=null) { outputStream.close(); }
if(datain!=null) {datain.close(); }
if(isr!=null) { isr.close(); }
}
catch(Exception e2) {
LOG(" ##callAlacrityService - exception in finally block! " + e2.getMessage());
}
}
if(al!=null && !al.isEmpty()) {
finalOk = true;
}
return al;
}