Java 标准网络请求
我想知道是否有一种通用的方式可以使用Java/Android进行网络呼叫,因为我正在努力解决我目前的策略。我目前正在尝试:Java 标准网络请求,java,android,standards,httpurlconnection,Java,Android,Standards,Httpurlconnection,我想知道是否有一种通用的方式可以使用Java/Android进行网络呼叫,因为我正在努力解决我目前的策略。我目前正在尝试: public static File synchronousConnection(String url, String requestMethod, byte[] requestData, Map<String, String> headers) { File returnData = null; try { URL ur
public static File synchronousConnection(String url, String requestMethod, byte[] requestData, Map<String, String> headers)
{
File returnData = null;
try
{
URL url = new URL(url);
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(true);
connection.setRequestMethod(requestMethod);
if(requestData != null && requestData.length > 0)connection.setRequestProperty("Content-Length", Integer.toString(requestData.length));
if(headers != null)for(String key : headers.keySet())connection.setRequestProperty(key, headers.get(key));
//connection.connect();
if(requestData != null && requestData.length > 0)
{
DataOutputStream outputStream = new DataOutputStream(connection.getOutputStream());
outputStream.write(requestData);
outputStream.flush();
outputStream.close();
}
//String response = inputStreamToString(url.openStream());
//System.out.println("Response: " + response);
int statusCode = connection.getResponseCode();
connection.disconnect();
System.out.println("Status code: " + statusCode);
//returnData = response;
}
catch(IOException e)
{
System.out.println("IO Exception in connections\n" + e.getLocalizedMessage());
e.printStackTrace();
}
catch(Exception e)
{
System.out.println("Invalid information for network connection\n" + e.getLocalizedMessage());
e.printStackTrace();
}
return returnData;
}
公共静态文件同步连接(字符串url、字符串requestMethod、字节[]requestData、映射头)
{
文件返回数据=null;
尝试
{
URL=新URL(URL);
HttpURLConnection connection=(HttpURLConnection)url.openConnection();
connection.setDoInput(true);
connection.setDoOutput(真);
connection.setRequestMethod(requestMethod);
if(requestData!=null&&requestData.length>0)connection.setRequestProperty(“Content-length”,Integer.toString(requestData.length));
if(headers!=null)(字符串键:headers.keySet())connection.setRequestProperty(键,headers.get(键));
//connection.connect();
if(requestData!=null&&requestData.length>0)
{
DataOutputStream outputStream=新的DataOutputStream(connection.getOutputStream());
outputStream.write(请求数据);
outputStream.flush();
outputStream.close();
}
//字符串响应=inputStreamToString(url.openStream());
//System.out.println(“响应:+Response”);
int statusCode=connection.getResponseCode();
连接断开();
System.out.println(“状态代码:“+statusCode”);
//返回数据=响应;
}
捕获(IOE异常)
{
System.out.println(“连接中的IO异常\n”+e.getLocalizedMessage());
e、 printStackTrace();
}
捕获(例外e)
{
System.out.println(“网络连接的无效信息\n”+e.getLocalizedMessage());
e、 printStackTrace();
}
返回数据;
}
我已经注释掉了相当多的组件,因为它们似乎干扰了流程或提出了问题,尽管它们在其他示例中。至于inputStreamToString(InputStream)
,这是我按照它所说的去做的方法之一
给定函数的输入参数,是否有URL连接的通用方法?目前,我真的很难获得任何连接到工作和奇怪的是,必须做的事情在一个自定义的方式为每个请求。此外,我似乎无法从
POST
请求中获取任何响应数据,即使我的API确实返回了一个响应正文。尝试使用此答案中提供的HttpRequest包装器:这简化了发出http请求的过程。@FoamyGuy看起来太棒了!然而,有没有一种发送PUT和DELETE的方法?@FoamyGuy另外,从外观上看,似乎没有一种真正的标准方式来执行网络呼叫,对吗?@RileyE:根据你的定义,“标准”网络请求/呼叫是什么?有很多网络协议和数据编码机制…你想做什么需要“标准”?@Squonk你是对的,有很多不同的协议和数据编码机制,但是,如果你看看我的示例方法,它甚至在到达请求之前就已经处理好了所有这些。我正在寻找一种方法,在参数存在所有差异的情况下调用服务器。我可以在iOS上轻松地做到这一点,我希望在Android上也能有类似的体验。