GVKun编程网logo

java httpUrlConnection 调用远程接口报400(java通过http调用接口)

25

此处将为大家介绍关于javahttpUrlConnection调用远程接口报400的详细内容,并且为您解答有关java通过http调用接口的相关问题,此外,我们还将为您介绍关于HttpURLConne

此处将为大家介绍关于java httpUrlConnection 调用远程接口报400的详细内容,并且为您解答有关java通过http调用接口的相关问题,此外,我们还将为您介绍关于HttpURLConnection原生JAVA http請求、HttpURLConnection和HttpsURLConnection、HttpURLConnection访问服务报403、JAVA httpURLConnection curl的有用信息。

本文目录一览:

java httpUrlConnection 调用远程接口报400(java通过http调用接口)

java httpUrlConnection 调用远程接口报400(java通过http调用接口)

java httpUrlConnection 调用远程接口报400

1.问题的出现:
线下开发时候使用httpUrlConnction测试调用远程接口一点问题都没有,但是打包后放到线上去后出现400的错误同样的参数在线下可以调试,放在线上就不行了。

分析
一般报400说明接口接收到了错误的参数,由于是远程调用别人的服务器接口看不到那边的日志,我们这边只有一个400,信息提示说对面json解析错误。那么我们同样的参数为什么放在线上就会出问题,
原因可能是我们的服务器的环境或者编码不对。
解决的办法
修改参数的编码,但是不管对json字符串怎么编码,都不管用,最后发现要再读入流的时候对参数进行编码才可以,编码的地方不对
代码示例
/**
     * 调用远程接口
     * @param url  接口的url路径
     * @param pamare  List的json数组
     * @return
     */
    public static String sendPost(String url,String pamare) {

        PrintWriter out = null;
        BufferedReader in = null;
        String result = "";
        try {
            // 打开和URL之间的连接
            HttpURLConnection conn = (HttpURLConnection) new URL(url).openConnection();
            // 设置通用的请求属性
            conn.setRequestMethod("POST");
            conn.setConnectTimeout(4 * 1000);
            conn.setRequestProperty("Content-Type","application/json;charset=UTF-8");

            // 发送POST请求必须设置如下两行
            conn.setDoOutput(true);
            conn.setDoInput(true);
            // 获取URLConnection对象对应的输出流
            out = new PrintWriter(new OutputStreamWriter(conn.getoutputStream(),"utf-8"));
            out.println(pamare);
            // flush输出流的缓冲
            out.flush();
            InputStream is = null;
            if (conn.getResponseCode() >= 400) {

                is = conn.getErrorStream();
            } else {
                is = conn.getInputStream();
            }

            // 定义BufferedReader输入流来读取URL的响应
            in = new BufferedReader(new InputStreamReader(is,"utf-8"));
            String line;
            while ((line = in.readLine()) != null) {
                result += line;
            }
        } catch (Exception e) {
            System.out.println("发送 POST 请求出现异常!" + e);
            e.printstacktrace();
        }
        //使用finally块来关闭输出流、输入流
        finally {
            try {
                if (out != null) {
                    out.close();
                }
                if (in != null) {
                    in.close();
                }
            } catch (IOException ex) {
                ex.printstacktrace();
            }
        }
        return result;
    }

HttpURLConnection原生JAVA http請求

HttpURLConnection原生JAVA http請求

场景:做开发很久了,每次进行http请求都要去找依赖包,非常不爽,所以直接自己搞一个简易的;当然论稳定性,和适用性肯定没有那些千锤百炼的第三方高,不过谁让我有强迫症呢,只要有自己的东西,就不想用别人的了,哪怕比我好



import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.util.Map;
import java.util.Set;

/**
 * http请求
 * 
 * @author taihei
 *
 */
public class MyHttpReq {
	
	/**
	 * http请求
	 * 
	 * @param uri
	 * @param method
	 *            请求方式(get/post)默认get 可为null
	 * @param params
	 *            参数 可为null
	 * @param charSet
	 *            默认 utf8 可为 null
	 * @return
	 * 			若请求失败,则返回以 "错误:"为开头的字符串
	 */
	public static String httpReq(String uri, String method, Map<String, Object> params, String charSet) {
		
		if (null == uri || uri.replace(" ", "").length() < 12 || !uri.startsWith("http://")) {//一个合法的网址至少为12位(需以http开头)
			return "错误:URI非法";
		}
		
		// 判断是否有指定请求方式 如果没有指定请求方式 则默认get请求
		if (null == method || method.replace("", "").length() < 3) {
			method = "get";
		}
		if (null == charSet || charSet.replace(" ", "").length() < 3) {// 最短的编码是gbk
																		// 3位
			charSet = "utf8";
		}
		method = method.toUpperCase();
		if (method.equalsIgnoreCase("get")) {
			// 对参数进行处理
			if (null != params && params.size() > 0) {
				Set<String> ks = params.keySet();
				StringBuilder sb = new StringBuilder();
				for (String key : ks) {
					try {
						sb.append(key + "=" + URLEncoder.encode(params.get(key).toString(), charSet) + "&");//内容用url编码
					} catch (UnsupportedEncodingException e) {
						e.printStackTrace();
					}
				}
				String pj = sb.substring(0, sb.length() - 1);
				if (pj.length() > 0) {
					if (uri.contains("?")) {
						uri = uri + "&" + pj;
					} else {
						uri = uri + "?" + pj;
					}
				}
			}

			try {
				URL url = new URL(uri);
				// 打开连接 HttpURLConnection是URLConnection的子类
				HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
				//默认返回值格式为json
				urlConnection.setRequestProperty("Accept", "application/json");
				if (200 == urlConnection.getResponseCode()) {
					// 得到输入流
					InputStream is = urlConnection.getInputStream();
					ByteArrayOutputStream baos = new ByteArrayOutputStream();
					byte[] buffer = new byte[1024];
					int len = 0;
					while (-1 != (len = is.read(buffer))) {
						baos.write(buffer, 0, len);
						baos.flush();
					}

					urlConnection.disconnect();// 数据读取完毕关闭流
					return baos.toString("utf-8");
				} else {
					return "错误:网络异常";
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		if (method.equalsIgnoreCase("post")) {
			try {
				URL url = new URL(uri);
				// 打开连接 HttpURLConnection是URLConnection的子类
				HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
				urlConnection.setRequestMethod(method);
				// conn.setConnectTimeout(10000);//连接超时 单位毫秒
				// conn.setReadTimeout(2000);//读取超时 单位毫秒
				// 发送POST请求必须设置如下两行
				urlConnection.setDoOutput(true);
				urlConnection.setDoInput(true);
//				urlConnection.setRequestProperty("Accept", "application/xhtml+xml");//xml格式返回值
				//默认返回值格式为json
				urlConnection.setRequestProperty("Accept", "application/json");
				urlConnection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
				// 如果需要发送数据
				if (null != params && params.size() > 0) {
					// 获取URLConnection对象对应的输出流
					PrintWriter printWriter = new PrintWriter(urlConnection.getOutputStream());
					// 发送请求参数
					printWriter.write(params.toString().replaceAll("[{|}]", ""));
					// flush输出流的缓冲
					printWriter.flush();
				}
				if (200 == urlConnection.getResponseCode()) {
					// 得到输入流
					InputStream is = urlConnection.getInputStream();
					ByteArrayOutputStream baos = new ByteArrayOutputStream();
					byte[] buffer = new byte[1024];
					int len = 0;
					while (-1 != (len = is.read(buffer))) {
						baos.write(buffer, 0, len);
						baos.flush();
					}
					urlConnection.disconnect();// 数据读取完毕关闭流
					return baos.toString("utf-8");
				} else {
					return "错误:网络异常";
				}
			} catch (IOException e) {
				e.printStackTrace();
			}
		}

		return "错误:请求失败";
	}
}

 

HttpURLConnection和HttpsURLConnection

HttpURLConnection和HttpsURLConnection

/** 
     * 发起https请求并获取结果 
     *  
     * @param requestUrl 请求地址 
     * @param requestMethod 请求方式(GET、POST) 
     * @param outputStr 提交的数据 
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
     */  
public static JSONObject httpsRequest(String requestUrl, String requestMethod, String outputStr){
        JSONObject jsonObject = null;  
        StringBuffer buffer = new StringBuffer();  
        try {  
            // 创建SSLContext对象,并使用我们指定的信任管理器初始化  
            TrustManager[] tm = { new MyX509TrustManager() };  
            SSLContext sslContext = SSLContext.getInstance("SSL", "SunJSSE");  
            sslContext.init(null, tm, new java.security.SecureRandom());  
            // 从上述SSLContext对象中得到SSLSocketFactory对象  
            SSLSocketFactory ssf = sslContext.getSocketFactory();  
  
            URL url = new URL(requestUrl);  
            HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection();  
            httpUrlConn.setSSLSocketFactory(ssf);  
  
            httpUrlConn.setDoOutput(true);  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setUseCaches(false);  
            // 设置请求方式(GET/POST)  
            httpUrlConn.setRequestMethod(requestMethod);  
  
           // if ("GET".equalsIgnoreCase(requestMethod))  
                httpUrlConn.connect();  
  
            // 当有数据需要提交时  
            if (null != outputStr) {  
                OutputStream outputStream = httpUrlConn.getOutputStream();  
                // 注意编码格式,防止中文乱码  
                outputStream.write(outputStr.getBytes("UTF-8"));  
                outputStream.close();  
            }  
  
            // 将返回的输入流转换成字符串  
            InputStream inputStream = httpUrlConn.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
            bufferedReader.close();  
            inputStreamReader.close();  
            // 释放资源  
            inputStream.close();  
            inputStream = null;  
            httpUrlConn.disconnect();  
            jsonObject = JSONObject.fromObject(buffer.toString());  
        } catch (ConnectException ce) {  
            log.error("Weixin server connection timed out.");  
        } catch (Exception e) {  
            log.error("https request error:{}", e);  
        }  
        return jsonObject;  
    }  

/** 
     * 发起http请求并获取结果 
     *  
     * @param requestUrl 请求地址 
     * @param requestMethod 请求方式(GET、POST) 
     * @param outputStr 提交的数据 
     * @return JSONObject(通过JSONObject.get(key)的方式获取json对象的属性值) 
     */  
public static String httpRequest(String requestUrl, String requestMethod, String outputStr){
        JSONObject jsonObject = null;  
        StringBuffer buffer = new StringBuffer();  
        try {  
            URL url = new URL(requestUrl);  
            HttpURLConnection httpUrlConn = (HttpURLConnection) url.openConnection();  
  
            httpUrlConn.setDoOutput(true);  
            httpUrlConn.setDoInput(true);  
            httpUrlConn.setUseCaches(false);  
            // 设置请求方式(GET/POST)  
            httpUrlConn.setRequestMethod(requestMethod);  
  
            httpUrlConn.connect();  
  
            // 当有数据需要提交时  
            if (null != outputStr) {  
                OutputStream outputStream = httpUrlConn.getOutputStream();  
                // 注意编码格式,防止中文乱码  
                outputStream.write(outputStr.getBytes("UTF-8"));  
                outputStream.close();  
            }  
  
            // 将返回的输入流转换成字符串  
            InputStream inputStream = httpUrlConn.getInputStream();  
            InputStreamReader inputStreamReader = new InputStreamReader(inputStream, "utf-8");  
            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);  
  
            String str = null;  
            while ((str = bufferedReader.readLine()) != null) {  
                buffer.append(str);  
            }  
            bufferedReader.close();  
            inputStreamReader.close();  
            // 释放资源  
            inputStream.close();  
            inputStream = null;  
            httpUrlConn.disconnect();  
            
/*            if(!"".equals(buffer.toString().trim())){
            jsonObject = JSONObject.fromObject(buffer.toString());  
            }*/
        } catch (ConnectException ce) {  
            log.error("Weixin server connection timed out.");  
        } catch (Exception e) {  
            log.error("https request error:{}", e);  
        }  
        return buffer.toString();  
    } 

 

HttpURLConnection访问服务报403

HttpURLConnection访问服务报403

如题,HttpURLConnection 调登录时是可以正常访问,但是其他请求时报403,是不是请求时需要带上登录信息?需要带什登录信息?sid?(已知登录后会返回sid)登录信息怎么封装到请求里?用conn.addRequestProperty(sid, "********");吗?请大神帮忙回答一下,谢谢

JAVA httpURLConnection curl

JAVA httpURLConnection curl

// 文件路径 D:\ApacheServer\web_java\HelloWorld\src\com\test\TestHttpCurl.java
package com.test;

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.DataOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;


import java.util.Map;
import java.util.List;

// PHP 作为接受请求端服务器
public class TestHttpCurl {

    public void testfun() {

        // 请求网址,需要加上 http:// 前缀来指明协议
        String urlStr = "http://localhost/test/t1.PHP"; // "https://www.baidu.com";
        HttpURLConnection httpURLConnection = null;
        InputStream inputStream             = null;
        BufferedReader bufferedReader       = null;
        // 连接方式:GET 或者 POST
        String requestMethod                = "POST";
        // POST 请求参数类别,此变量为自定义控制区分传参类别,param(单传参),json(参数为json串),file(上传文件),param_file(传参并上传文件)
        String postType                     = "param_file";
        // 此变量自定义控制将响应信息转为文本输出还是文件保存起来,str(将响应信息直接打印),file(将响应信息保存为文件)
        String ResponseType                 = "str";
        // 存放数据
        StringBuffer stringBuffer           = null;
        // 返回结果字符串
        String str_result                   = null;
        
        try {
            // 创建远程url连接对象
            URL url = new URL(urlStr);
            // 通过远程url连接对象打开一个连接,强转成httpURLConnection类
            httpURLConnection = (HttpURLConnection) url.openConnection();
            
            // 设置连接主机服务器的超时时间:15000毫秒
            httpURLConnection.setConnectTimeout(15000);
            // 设置读取远程返回的数据时间:60000毫秒
            httpURLConnection.setReadTimeout(60000);
            
            // 设置请求报头消息
            // 维持长连
            //httpURLConnection.setRequestProperty("Connection","Keep-Alive");
            // 设置编码
            //httpURLConnection.setRequestProperty("Charset","UTF-8");
            // 自定义报头信息,PHP 端可以用 $_SERVER [‘HTTP_TESTHEADER‘] 获取
            //httpURLConnection.setRequestProperty("testHeader","testHeaderVal");
            
            // 允许读入,默认值为 true,之后就可以使用httpURLConnection.getInputStream().read(); 因为总是使用 httpURLConnection.getInputStream() 获取服务端的响应,因此默认值是 true
            //httpURLConnection.setDoInput(true);
            
            // 设置连接方式:GET/POST,默认是GET
            httpURLConnection.setRequestMethod(requestMethod);
            if(requestMethod == "POST") {
                // 允许写出, 默认值为 false,之后就可以使用httpURLConnection.getoutputStream().write(); POST请求,参数要放在 http 正文内,因此需要设为 true,默认情况下是 false
                httpURLConnection.setDoOutput(true);
                // POST 请求不能使用缓存
                httpURLConnection.setUseCaches(false);
                
                
                // 要上传的文件,需上传文件时用到,在项目基础路径下的 upload 文件夹内
                String fileName = "00125943U-0.jpg";
                // 项目基础路径
                String appBase = Thread.currentThread().getContextClassLoader().getResource("../../").toString().substring(6);
                // 获取文件的完整绝对路径,File.separator 表示目录分割斜杠,这里完整绝对路径为 这里完整路径为 D:/ApacheServer/web_java/.Metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/HelloWorld/upload/00125943U-0.jpg
                String fullFileName = appBase + "upload" + File.separator + fileName;
                // 创建要上传的 file 对象
                File uploadFile = new File(fullFileName);
                
                
                // 设置请求参数内容
                // POST 方式传递参数的本质是:从连接中得到一个输出流,通过输出流把数据写到服务器,所以以下所有 POST 传参语句内容,除了设置报头语句,均可在 httpURLConnection.connect(); 语句之后执行
                String body = ""; 
                if(postType == "param") { // PHP 通过 $_POST[‘testKey1‘]; $_POST[‘testKey2‘]; 获取请求参数
                    // 数据的拼接采用键值对格式,键与值之间用=连接。每个键值对之间用&连接
                    body = "testKey1=testVal1&testKey2=testVal2";
                    
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(httpURLConnection.getoutputStream(),"UTF-8"));
                    bufferedWriter.write(body);
                    bufferedWriter.close();
                }else if(postType == "json") { // PHP 通过 file_get_contents(‘PHP://input‘); 获取上传的 json 串
                    // 设置 POST 报头数据类型是 json 格式
                    httpURLConnection.setRequestProperty("Content-Type","application/json;charset=utf-8");
                    // 拼接标准 json 字符串
                    body = "{\"testKey1\":\"testVal1\",\"testKey2\":\"testVal2\"}";
                    
                    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(httpURLConnection.getoutputStream(),"UTF-8"));
                    bufferedWriter.write(body);
                    bufferedWriter.close();
                }else if(postType == "file") { // PHP 通过 $file_str = file_get_contents(‘PHP://input‘); 获取上传图片内容,然后通过 file_put_contents(‘test.jpg‘,$file_str); 将图片保存在 PHP 服务器本地
                    // 设置 POST 报头数据类型是 file 格式
                    httpURLConnection.setRequestProperty("Content-Type","file/*");
                    
                    // 用连接创建一个输出流
                    OutputStream outputStream = httpURLConnection.getoutputStream();
                    // 把文件封装成一个流
                    FileInputStream fileInputStream = new FileInputStream(uploadFile);
                    // 每次从输入流实际读取到的字节数
                    int len = 0;
                    // 定义一个字节数组,相当于缓存,数组长度为1024,即缓存大小为1024个字节
                    byte[] cache = new byte[1024];
                    // inputStream.read(cache)) 方法,从输入流中读取最多 cache 数组大小的字节,并将其存储在 cache 中。以整数形式返回实际读取的字节数,当文件读完时返回-1
                    while((len = fileInputStream.read(cache)) != -1){
                        // 每次把数组 cache 从 0 到 len 长度的内容写入到输出流中
                        outputStream.write(cache,0,len);
                    }
                    // 关闭流
                    fileInputStream.close();
                    outputStream.close();
                }else if(postType == "param_file") {
                    String BOUNDARY = java.util.UUID.randomUUID().toString();
                    String TWO_HYPHENS = "--";
                    String LINE_END = "\r\n";
                    
                    httpURLConnection.setRequestProperty("Content-Type","multipart/form-data; BOUNDARY=" + BOUNDARY);
                    
                    // 用连接创建一个输出流
                    DataOutputStream dataOutputStream = new DataOutputStream(httpURLConnection.getoutputStream());
                    
                    stringBuffer = new StringBuffer();
                    
                    // 要发送的数据
                    String testKey1 = "testVal1";
                    String testKey2 = "testVal2";
                    
                    // 封装键值对数据一
                    stringBuffer.append(TWO_HYPHENS);
                    stringBuffer.append(BOUNDARY);
                    stringBuffer.append(LINE_END);
                    // 发送的参数1的键名为 testKey1,PHP 通过 $_POST[‘testKey1‘]; 获取请求参数值为 "testVal1"
                    stringBuffer.append("Content-disposition: form-data; name=\"" + "testKey1" + "\"");
                    stringBuffer.append(LINE_END);
                    // 发送的参数1类型为文本
                    stringBuffer.append("Content-Type: " + "text/plain" );
                    stringBuffer.append(LINE_END);
                    // 发送的参数1的长度
                    stringBuffer.append("Content-Lenght: " + testKey1.length());
                    stringBuffer.append(LINE_END);
                    stringBuffer.append(LINE_END);
                    // 发送的参数1的值
                    stringBuffer.append(testKey1);
                    stringBuffer.append(LINE_END);

                    // 封装键值对数据二
                    stringBuffer.append(TWO_HYPHENS);
                    stringBuffer.append(BOUNDARY);
                    stringBuffer.append(LINE_END);
                    // 发送的参数2的键名为 testKey2,PHP 通过 $_POST[‘testKey2‘]; 获取请求参数值为 "testVal2"
                    stringBuffer.append("Content-disposition: form-data; name=\"" + "testKey2" + "\"");
                    stringBuffer.append(LINE_END);
                    stringBuffer.append("Content-Type: " + "text/plain" );
                    stringBuffer.append(LINE_END);
                    stringBuffer.append("Content-Lenght: " + testKey2.length());
                    stringBuffer.append(LINE_END);
                    stringBuffer.append(LINE_END);
                    stringBuffer.append(testKey2);
                    stringBuffer.append(LINE_END);

                    // 拼接完成后,写入到输出流
                    dataOutputStream.write(stringBuffer.toString().getBytes());
                    
                    
                    //拼接文件的参数
                    stringBuffer = new StringBuffer();
                    stringBuffer.append(LINE_END);
                    stringBuffer.append(TWO_HYPHENS);
                    stringBuffer.append(BOUNDARY);
                    stringBuffer.append(LINE_END);
                    // 上传文件键名为 testUploadFile,上传文件的文件名为 testFile,PHP 端通过 $_FILES[‘testUploadFile‘][‘name‘] 可获取文件名 "testFile"
                    stringBuffer.append("Content-disposition: form-data; name=\"" + "testUploadFile" + "\"; filename=\"" + "testFile" + "\"");
                    stringBuffer.append(LINE_END);
                    // 上传文件类型,PHP 端通过 $_FILES[‘testUploadFile‘][‘type‘] 可获取文件类型 "image/jpeg"
                    stringBuffer.append("Content-Type: " + "image/jpeg" );
                    stringBuffer.append(LINE_END);
                    stringBuffer.append("Content-Lenght: "+uploadFile.length());
                    stringBuffer.append(LINE_END);
                    stringBuffer.append(LINE_END);

                    dataOutputStream.write(stringBuffer.toString().getBytes());
                    
                    
                    // 把上传文件封装成一个流
                    FileInputStream fileInputStream = new FileInputStream(uploadFile);
                    // 每次从输入流实际读取到的字节数
                    int len = 0;
                    // 定义一个字节数组,相当于缓存,数组长度为1024,即缓存大小为1024个字节
                    byte[] cache = new byte[1024];
                    // inputStream.read(cache)) 方法,从输入流中读取最多 cache 数组大小的字节,并将其存储在 cache 中。以整数形式返回实际读取的字节数,当文件读完时返回-1
                    while((len = fileInputStream.read(cache)) != -1){
                        // 每次把数组 cache 从 0 到 len 长度的内容写入到输出流中
                        dataOutputStream.write(cache,len);
                    }
                    // 关闭流
                    fileInputStream.close();
                    dataOutputStream.flush();
                    
                    
                    //写入结束标记位
                    byte[] endData = (LINE_END + TWO_HYPHENS + BOUNDARY + TWO_HYPHENS + LINE_END).getBytes();
                    dataOutputStream.write(endData);
                    dataOutputStream.flush();
                    
                }
            }
            
            // 发送请求
            // connect() 方法可以不用明确调用,因为在调用 getInputStream() 方法时会检查连接是否已经建立,如果没有建立,则会调用 connect() 方法
            httpURLConnection.connect();
            
            
            
            // 获取所有响应头字段
            Map<String,List<String>> map = httpURLConnection.getHeaderFields();
            // 遍历所有的响应头字段
            for (String key : map.keySet())
            {
                // 显示内容示例
                /*
                Accept-Ranges=====>[bytes]
                null=====>[HTTP/1.1 200 OK]
                Server=====>[bfe/1.0.8.18]
                Etag=====>["588603eb-98b"]
                Cache-Control=====>[private,no-cache,no-store,proxy-revalidate,no-transform]
                Connection=====>[Keep-Alive]
                Set-Cookie=====>[BDORZ=27315; max-age=86400; domain=.baidu.com; path=/]
                Pragma=====>[no-cache]
                Last-Modified=====>[Mon,23 Jan 2017 13:23:55 GMT]
                Content-Length=====>[2443]
                Date=====>[Sat,14 Sep 2019 04:51:29 GMT]
                Content-Type=====>[text/html]
                */
                System.out.println(key + "=====>" + map.get(key));
            }
            
            
            
            // 通过httpURLConnection连接,获取输入流
            if (httpURLConnection.getResponseCode() == HttpURLConnection.HTTP_OK) { // HttpURLConnection.HTTP_OK 值即为 200
                // 把返回内容读入到内存输入流中
                inputStream = httpURLConnection.getInputStream();
                
                if(ResponseType == "str") {
                    // 封装输入流inputStream,并指定字符集
                    bufferedReader = new BufferedReader(new InputStreamReader(inputStream,"UTF-8"));
                    // 存放数据
                    stringBuffer = new StringBuffer();
                    String temp = null;
                    while ((temp = bufferedReader.readLine()) != null) {
                        stringBuffer.append(temp);
                        //stringBuffer.append("\r\n");
                        
                    }
                    str_result = stringBuffer.toString();
                    System.out.println("返回值为 : " + str_result);
                    
                }else if(ResponseType == "file") {
                    // 获取项目基目录的绝对路径 这里是 D:/ApacheServer/web_java/.Metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/HelloWorld/
                    String appBase = Thread.currentThread().getContextClassLoader().getResource("../../").toString().substring(6);
                    // 合成下载文件存放目录 这里是 D:/ApacheServer/web_java/.Metadata/.plugins/org.eclipse.wst.server.core/tmp0/wtpwebapps/HelloWorld/downLoad
                    String downLoadpath = appBase + "downLoad";
                    // 创建目录对象
                    File fileDir = new File(downLoadpath);
                    if (!fileDir.exists()){
                        // 目录不存在则创建
                        fileDir.mkdirs();
                    }
                    // 在指定目录下创建 file 对象
                    File file = new File(fileDir,"fileName");
                    
                    // 将文件对象加载到 文件输出流中,以对文件进行写入操作
                    FileOutputStream fileOutputStream = new FileOutputStream(file);
                    // 每次从输入流实际读取到的字节数
                    int len = 0;
                    // 定义一个字节数组,相当于缓存,数组长度为1024 * 8,即缓存大小为1024 * 8个字节
                    byte[] cache = new byte[1024 * 8];
                    // inputStream.read(cache)) 方法,从输入流中读取最多 cache 数组大小的字节,并将其存储在 cache 中。以整数形式返回实际读取的字节数,当文件读完时返回-1
                    while ((len = inputStream.read(cache)) != -1){
                        // 每次把数组 cache 从 0 到 len 长度的内容写入到文件中
                        fileOutputStream.write(cache,len);
                    }
                    fileOutputStream.flush();
                }
                
            }
        } catch (MalformedURLException e) {
            e.printstacktrace();
        } catch (IOException e) {
            e.printstacktrace();
        } finally {
            // 关闭资源
            if (bufferedReader != null) {
                try {
                    bufferedReader.close();
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }

            if (inputStream != null) {
                try {
                    inputStream.close();
                } catch (IOException e) {
                    e.printstacktrace();
                }
            }

            httpURLConnection.disconnect();// 关闭远程连接
        }
    }
}

关于java httpUrlConnection 调用远程接口报400java通过http调用接口的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于HttpURLConnection原生JAVA http請求、HttpURLConnection和HttpsURLConnection、HttpURLConnection访问服务报403、JAVA httpURLConnection curl等相关内容,可以在本站寻找。

本文标签: