Java HTTPURLConnection-空响应
这可能是一个常见的问题,但我想不出来 我有一个URL,如果我将其插入浏览器,它将返回预期的票证详细信息,因此我知道它正在工作:Java HTTPURLConnection-空响应,java,ajax,xml,Java,Ajax,Xml,这可能是一个常见的问题,但我想不出来 我有一个URL,如果我将其插入浏览器,它将返回预期的票证详细信息,因此我知道它正在工作: https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails?actionString=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CG
https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails?actionString=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchemainstance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName%3Exxxxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxxx%3C%2FIntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E
对于更可读的版本,请使用以下URL:
https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails
其次是:
?actionString=
然后是以下xml:
<?xml version="1.0" encoding="utf-16"?>
<GetTicketAction xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword>
<SrServiceRecid>1921</SrServiceRecid></GetTicketAction>
在这一行:
System.out.println(line);
这是所有的代码。如您所见,我已尝试将serverParameters设置为URL编码字符串和xml字符串:
package com.google.gwt.HelpDeskTest.server;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
import com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;
@SuppressWarnings("serial")
public class HelpDeskTestImpl extends RemoteServiceServlet implements
HelpDeskTestService {
@Override
public String postToRemoteServer(String serviceUrl)
throws HelpDeskTestException {
try {
final String serverPath = "https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";
System.out.println(serverPath);
//DO I need to URL encode this???
//I’ve tried this:
//final String serverParameters= "%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F" +
//"www.w3.org%2F2001%2FXMLSchema-instance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName" +
//"%3Exxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F" +
//"IntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E";
final String serverParameters="<?xml version=%221.0%22 encoding=%22utf-16%22?><GetTicketAction xmlns:xsi=%22http://www.w3.org/2001/XMLSchema-instance%22 xmlns:xsd=%22http://www.w3.org/2001/XMLSchema%22><CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword><SrServiceRecid>1921</SrServiceRecid></GetTicketAction>";
System.out.println(serverParameters);
//Open HttpURLConnection:
URL url = new URL(serverPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10000); //added this to see if I can address the timeout issue.
connection.setReadTimeout(10000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-16");
connection.setRequestProperty("Content-Length", "" + Integer.toString(serverParameters.getBytes().length));
connection.setUseCaches (false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(serverParameters);
wr.flush();
wr.close();
//process response - need to get xml response back.
InputStream stream = connection.getInputStream();
//put output stream into a string
BufferedReader br = new BufferedReader(new InputStreamReader(stream,"utf-16"));
String result = "";
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
result+= line;
}
br.close();
connection.disconnect();
System.out.println(result);
return result;
} catch (final Exception e) {
System.out.println(e.getMessage());
throw new HelpDeskTestException();
//handle timeout error
}
}
}
package com.google.gwt.HelpDeskTest.server;
导入java.io.BufferedReader;
导入java.io.DataOutputStream;
导入java.io.File;
导入java.io.FileReader;
导入java.io.InputStream;
导入java.io.InputStreamReader;
导入java.net.HttpURLConnection;
导入java.net.URL;
导入com.google.gwt.user.server.rpc.RemoteServiceServlet;
导入com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
导入com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;
@抑制警告(“串行”)
公共类HelpDeskTestImpl扩展了RemoteServiceServlet实现
HelpDeskTestService{
@凌驾
公共字符串postToRemoteServer(字符串服务URL)
抛出HelpDeskTestException{
试一试{
最终字符串serverPath=”https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";
System.out.println(服务器路径);
//我需要对这个进行URL编码吗???
//我试过这个:
//最终字符串serverParameters=“%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F”+
//“www.w3.org%2F2001%2FXMLSchema实例%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName”+
//%3Exxxxx%3C%2CompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2IntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F“+
//“集成密码%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E”;
最终字符串serverParameters=“xxxxxxxxxxx 1921”;
System.out.println(服务器参数);
//打开HttpURLConnection:
URL=新URL(服务器路径);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setConnectTimeout(10000);//添加此选项以查看是否可以解决超时问题。
connection.setReadTimeout(10000);
connection.setDoOutput(真);
connection.setDoInput(true);
connection.setInstanceFollowDirections(false);
connection.setRequestMethod(“POST”);
connection.setRequestProperty(“内容类型”、“应用程序/x-www-form-urlencoded”);
setRequestProperty(“字符集”、“utf-16”);
connection.setRequestProperty(“Content Length”,“Integer.toString(serverParameters.getBytes().Length));
connection.setUseCaches(false);
DataOutputStream wr=新的DataOutputStream(connection.getOutputStream());
writeBytes(服务器参数);
wr.flush();
wr.close();
//流程响应-需要返回xml响应。
InputStream=connection.getInputStream();
//将输出流放入字符串中
BufferedReader br=新的BufferedReader(新的InputStreamReader(流,“utf-16”));
字符串结果=”;
弦线;
而((line=br.readLine())!=null){
系统输出打印项次(行);
结果+=行;
}
br.close();
连接断开();
系统输出打印项次(结果);
返回结果;
}捕获(最终异常e){
System.out.println(e.getMessage());
抛出新的HelpDeskTestException();
//句柄超时错误
}
}
}
我得到了“服务器返回的HTTP响应代码:500,用于URL:myconnectwise.net/v4\u 6\u release/services/system\u io/…;在执行代码之后。
所以检查服务器(500-内部服务器错误)。
并在将结果解析为XML之前分析响应代码。在执行代码之后,我得到了“服务器返回的HTTP响应代码:500 for URL:”。所以检查服务器(500-内部服务器错误)。并在将结果解析为XML之前分析响应代码。@DmitryTsechoev谢谢。这为我指明了正确的方向。我带回了回复代码,正如你说的是500。我将包含xml的整个URL放入serverPath变量,现在得到的响应代码是200。然而,当我看到line变量中返回的内容时,它似乎是一个汉字字符串(事实上Google Translate将其识别为汉字)。你知道为什么会这样吗?好的,这是可行的!我替换了这一行:“BufferedReader br=new BufferedReader(new InputStreamReader(流,“utf-16”);”对于这一个:'BufferedReader br=newBufferedReader(newInputStreamReader(流,“utf-8”);'现在我得到的是xml,而不是汉字@DmitryTsechoev你能把你的评论写在一个答案里吗?我会把它标记为已回答?谢谢。我补充了我的评论作为回答。很高兴你成功了信息技术谢谢你!祝你好运
package com.google.gwt.HelpDeskTest.server;
import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL;
import com.google.gwt.user.server.rpc.RemoteServiceServlet;
import com.google.gwt.HelpDeskTest.client.HelpDeskTestService;
import com.google.gwt.HelpDeskTest.shared.HelpDeskTestException;
@SuppressWarnings("serial")
public class HelpDeskTestImpl extends RemoteServiceServlet implements
HelpDeskTestService {
@Override
public String postToRemoteServer(String serviceUrl)
throws HelpDeskTestException {
try {
final String serverPath = "https://www.myconnectwise.net/v4_6_release/services/system_io/integration_io/processClientAction.rails";
System.out.println(serverPath);
//DO I need to URL encode this???
//I’ve tried this:
//final String serverParameters= "%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22utf-16%22%3F%3E%0A%3CGetTicketAction%20xmlns%3Axsi%3D%22http%3A%2F%2F" +
//"www.w3.org%2F2001%2FXMLSchema-instance%22%20xmlns%3Axsd%3D%22http%3A%2F%2Fwww.w3.org%2F2001%2FXMLSchema%22%3E%0A%3CCompanyName" +
//"%3Exxxxx%3C%2FCompanyName%3E%3CIntegrationLoginId%3Exxxxx%3C%2FIntegrationLoginId%3E%3CIntegrationPassword%3Exxxxx%3C%2F" +
//"IntegrationPassword%3E%0A%3CSrServiceRecid%3E1921%3C%2FSrServiceRecid%3E%3C%2FGetTicketAction%3E";
final String serverParameters="<?xml version=%221.0%22 encoding=%22utf-16%22?><GetTicketAction xmlns:xsi=%22http://www.w3.org/2001/XMLSchema-instance%22 xmlns:xsd=%22http://www.w3.org/2001/XMLSchema%22><CompanyName>xxxx</CompanyName><IntegrationLoginId>xxxx</IntegrationLoginId><IntegrationPassword>xxxx</IntegrationPassword><SrServiceRecid>1921</SrServiceRecid></GetTicketAction>";
System.out.println(serverParameters);
//Open HttpURLConnection:
URL url = new URL(serverPath);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setConnectTimeout(10000); //added this to see if I can address the timeout issue.
connection.setReadTimeout(10000);
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
connection.setRequestProperty("charset", "utf-16");
connection.setRequestProperty("Content-Length", "" + Integer.toString(serverParameters.getBytes().length));
connection.setUseCaches (false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.writeBytes(serverParameters);
wr.flush();
wr.close();
//process response - need to get xml response back.
InputStream stream = connection.getInputStream();
//put output stream into a string
BufferedReader br = new BufferedReader(new InputStreamReader(stream,"utf-16"));
String result = "";
String line;
while ((line = br.readLine()) != null) {
System.out.println(line);
result+= line;
}
br.close();
connection.disconnect();
System.out.println(result);
return result;
} catch (final Exception e) {
System.out.println(e.getMessage());
throw new HelpDeskTestException();
//handle timeout error
}
}
}