java get请求 字节_Java发送HTTP的POST和GET方式请求

关于连接配置方面还不是很懂,但其他按照如下类再根据具体需要做调整应该没什么问题,可用于HTTP和HTTPS

import java.io.BufferedReader;

import java.io.DataOutputStream;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.io.OutputStream;

import java.io.PrintWriter;

import java.net.MalformedURLException;

import java.net.URL;

import java.security.KeyManagementException;

import java.security.NoSuchAlgorithmException;

import java.security.NoSuchProviderException;

import java.security.cert.CertificateException;

import java.security.cert.X509Certificate;

import java.util.Map;

import javax.net.ssl.HttpsURLConnection;

import javax.net.ssl.SSLContext;

import javax.net.ssl.SSLSocketFactory;

import javax.net.ssl.TrustManager;

import javax.net.ssl.X509TrustManager;

public class Http_Test {

/**

*

* @param requestUrl url的字符串形式

* @param requestMethod 请求方式:POST或者GET

* @param outputStr 如果请求方式为POST的话,要POST的内容,GET的话为null

*/

public String httpRequest(String requestUrl, String requestMethod, String outputStr){

//POST方式用,根据需要选其一即可

OutputStream outputStream = null;

DataOutputStream dataOutputStream = null;

PrintWriter printWriter = null;

//POST和GET都要用

InputStream inputStream = null;

InputStreamReader inputStreamReader = null;

BufferedReader bufferedreader = null;

StringBuilder sb = new StringBuilder();

try {

//创建要访问的url

URL url = new URL(requestUrl);

///非必须,看需要

// 创建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的openConnection()方法返回http(https)连接对象,根据URL类型不同返回不同的URLConnection子类的对象

HttpsURLConnection httpUrlConn = (HttpsURLConnection) url.openConnection(); //如果访问HTTPS则强制转换为HttpsURLConnection对象

//对httpUrlConn进行设置,关于设置这点还不是很懂,看需要配置

if(requestMethod.equalsIgnoreCase("POST")){

httpUrlConn.setSSLSocketFactory(ssf); //如果前面有创建

httpUrlConn.setDoOutput(true); // 设置是否向connection输出SSLSocketFactory对象的话选择

httpUrlConn.setDoInput(true); // 设置是否向connection输入,这两个属性设置为True都是POST必须的

httpUrlConn.setUseCaches(false);// 设置是否使用缓存,Post 请求不能使用缓存

httpUrlConn.setRequestMethod("GET/POST"); // 设置请求方式(GET/POST)

// 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的

// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode进行编码

// 这一步的设置可能与POST的内容,即本方法的outputStr有关

// 要提交的字符串,用URLEncoder对中文字符进行URL编码,且指定字符编码

// String outputStr = "hello=" + URLEncoder.encode("你好", "utf-8");

httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// 设置通用的请求属性,应该都是同一种东西

httpUrlConn.setRequestProperty("accept", "*/*");

httpUrlConn.setRequestProperty("connection", "Keep-Alive");

httpUrlConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

}else if(requestMethod.equalsIgnoreCase("GET")){

httpUrlConn.setSSLSocketFactory(ssf);

httpUrlConn.setDoOutput(true); // 设置是否向connection输出

httpUrlConn.setDoInput(true); // 设置是否向connection输入,这两个属性设置为True都是POST必须的

httpUrlConn.setUseCaches(false);// 设置是否使用缓存,Post 请求不能使用缓存

httpUrlConn.setRequestMethod("GET/POST"); // 设置请求方式(GET/POST)

// 配置本次连接的Content-type,配置为application/x- www-form-urlencoded的

// 意思是正文是urlencoded编码过的form参数,下面我们可以看到我们对正文内容使用URLEncoder.encode进行编码

httpUrlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

// 设置通用的请求属性,应该都是同一种东西

httpUrlConn.setRequestProperty("accept", "*/*");

httpUrlConn.setRequestProperty("connection", "Keep-Alive");

httpUrlConn.setRequestProperty("user-agent", "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1;SV1)");

}

//httpUrlConn进行连接 httpUrlConn.getOutputStream会隐含的进行connect

//httpUrlConn.connect();

获取相应头字段非必须,看需要

获取所有响应头字段

//Map> map = httpUrlConn.getHeaderFields();

遍历所有的响应头字段

//for (String key : map.keySet()) {

// System.out.println(key + "--->" + map.get(key));

//}

//有数据要提交时——POST,有数据要接收时——GET

if(requestMethod.equalsIgnoreCase("POST")){ //先提交再接收

outputStream = httpUrlConn.getOutputStream();//输出字节

//关于JAVA IO的Stream太多了,根据需要自己选择,不限于以下3种

//1.直接用outputStream的write方法输出

// 输出字符串outputStr,且指定字符编码

outputStream.write(outputStr.getBytes("UTF-8"));

outputStream.close();

//2.将outputStream用DataOutputStream再进一步包装

dataOutputStream = new DataOutputStream(outputStream);

//要提交的字符串,用URLEncoder对中文字符进行URL编码,且指定字符编码

//String outputStr = " firstname= " + URLEncoder.encode(" 一个大肥人 ", " utf-8 ");

dataOutputStream.writeBytes(outputStr);

dataOutputStream.flush();

dataOutputStream.close();

outputStream.close();

//3.将outputStream用PrintWriter再进一步包装

printWriter = new PrintWriter(outputStream);

printWriter.print(outputStr);

printWriter.flush();

printWriter.close();

outputStream.close();

//

//POST可能有返回数据需要接收

inputStream = httpUrlConn.getInputStream();//接收字节

inputStreamReader = new InputStreamReader(inputStream,"utf-8");//接收的字节转化为字符,还可以指定编码

bufferedreader = new BufferedReader(inputStreamReader);

String lines;

while ((lines = bufferedreader.readLine()) != null) {

sb.append(lines);

}

bufferedreader.close();

inputStreamReader.close();

inputStream.close();

}else if(requestMethod.equalsIgnoreCase("GET")){ //GET的话可以把请求参数附在URL里,只提交不用接收

//首先打开httpUrlConn的input流,再用inputStreamReader对inputStream包装,在用BufferedReader接收

inputStream = httpUrlConn.getInputStream();//接收字节

inputStreamReader = new InputStreamReader(inputStream,"utf-8");//接收的字节转化为字符,还可以指定编码

bufferedreader = new BufferedReader(inputStreamReader);

sb = new StringBuilder();

String lines;

while ((lines = bufferedreader.readLine()) != null) {

sb.append(lines);

}

}

//关闭httpUrlConn连接

httpUrlConn.disconnect();

} catch (MalformedURLException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchAlgorithmException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (NoSuchProviderException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (KeyManagementException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

} finally{

try{

if(outputStream != null)

outputStream.close();

if(dataOutputStream != null)

dataOutputStream.close();

if(printWriter != null)

printWriter.close();

if(inputStream != null)

inputStream.close();

if(inputStreamReader != null)

inputStreamReader.close();

if(bufferedreader != null)

bufferedreader.close();

} catch (IOException e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

return sb.toString();

}

/**

* 证书信任管理器(用于https请求)

*

* @author liufeng

* @date 2013-08-08

*/

public class MyX509TrustManager implements X509TrustManager {

public void checkClientTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

public void checkServerTrusted(X509Certificate[] chain, String authType) throws CertificateException {

}

public X509Certificate[] getAcceptedIssuers() {

return null;

}

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您一些代码示例来演示如何添加请求头和发送 POST 请求。 添加请求头: ```java import java.net.HttpURLConnection; import java.net.URL; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("https://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("GET"); conn.setRequestProperty("User-Agent", "Mozilla/5.0"); conn.setRequestProperty("Accept-Language", "en-US,en;q=0.5"); int responseCode = conn.getResponseCode(); System.out.println("Response code: " + responseCode); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们创建了一个 HttpURLConnection 对象,并使用 setRequestProperty() 方法添加了一些请求头信息,包括 User-Agent 和 Accept-Language。 发送 POST 请求: ```java import java.io.DataOutputStream; import java.net.HttpURLConnection; import java.net.URL; import java.nio.charset.StandardCharsets; public class HttpUrlConnectionExample { public static void main(String[] args) { try { URL url = new URL("https://www.example.com"); HttpURLConnection conn = (HttpURLConnection) url.openConnection(); conn.setRequestMethod("POST"); conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); conn.setDoOutput(true); String postData = "param1=value1&param2=value2"; byte[] postDataBytes = postData.getBytes(StandardCharsets.UTF_8); DataOutputStream wr = new DataOutputStream(conn.getOutputStream()); wr.write(postDataBytes); wr.flush(); wr.close(); int responseCode = conn.getResponseCode(); System.out.println("Response code: " + responseCode); } catch (Exception e) { e.printStackTrace(); } } } ``` 在上面的代码中,我们创建了一个 HttpURLConnection 对象,并设置了请求方法为 POST。然后我们使用 setRequestProperty() 方法添加了 Content-Type 请求头,指定了请求体的格式为 application/x-www-form-urlencoded。接着,我们使用 setDoOutput() 方法设置为 true,表示我们要发送一个请求体。然后我们将请求参数转换成字节数组,并使用 DataOutputStream 将其写入请求体中。最后,我们使用 getResponseCode() 方法获取响应码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值