`

以流的形式发送请求

    博客分类:
  • http
阅读更多

package com.ckn.web.main;

import java.io.ByteArrayOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.ProtocolException;
import java.net.URL;
import java.net.URLConnection;

import javax.net.ssl.HttpsURLConnection;

public class Test2 {
    
    public static final String JSON_ENCODE="UTF-8";
    
    public static String post(String url,String json) {
        
        String respText=null;
        try{
            //1、重新对请求报文进行 UTF-8 编码
            byte[] postData=null;
            postData=json.getBytes(JSON_ENCODE);
            
            //2、发送 HTTP/HTTPS 请求
            OutputStream reqStream=null;
            InputStream resStream=null;
            URLConnection urlCon=null;
            
            // A、与服务器建立 HTTP/HTTPS 连接
            urlCon=Test2.createRequest(url, "POST");
            // B、指定报文头 [Content-type]、[Content-length]、[Keep-alive]
            urlCon.setRequestProperty("Content-type", "application/json;charset="+JSON_ENCODE);
            urlCon.setRequestProperty("Content-length", String.valueOf(postData.length));
            urlCon.setRequestProperty("Keep-alive", "false");
            // C、获取与服务器的输出流、然后向服务器写数据
            reqStream=urlCon.getOutputStream();
            reqStream.write(postData);
            reqStream.flush();
            reqStream.close();
            
            // D、接收服务器返回结果
            ByteArrayOutputStream ms=null;
            resStream=urlCon.getInputStream();
            ms=new ByteArrayOutputStream();
            byte[] buf=new byte[4096];
            int count;
            while((count=resStream.read(buf, 0, buf.length))>0){
                ms.write(buf, 0, count);
            }
            resStream.close();
            respText=new String(ms.toByteArray(),JSON_ENCODE);
        }catch(Exception e2){
            e2.printStackTrace();
        }
        
        return respText;
    }
    
    protected static URLConnection createRequest(String urlStr, String strMethod) throws Exception{
        //根据 URL 获取一个到主机连接
        URLConnection conn= Test2.getRequestByUrl(urlStr);
        
        //判断该连接是否 HTTP 连接
        if(conn instanceof HttpsURLConnection || !(conn instanceof HttpURLConnection)){
            throw new RuntimeException("URL 无法建立 HTTP 连接:"+urlStr);
        }
        
        //设置HTTP相关配置:提交方式
        HttpURLConnection httpConn=(HttpURLConnection) conn;
        httpConn.setRequestMethod(strMethod);
        
        return conn;
    }
    
    /**
     * 获取URLConnection
     * @param urlStr
     * @return
     * @throws MalformedURLException
     */
    public static URLConnection getRequestByUrl(String urlStr) throws Exception{
        URL url=null;
        URLConnection conn=null;

        url=new URL(urlStr);
        conn=url.openConnection();
        conn.setDoInput(true);
        conn.setDoOutput(true);
        
        return conn;
    }
    
    public static void main(String[] args){
        String url="http://127.0.0.1:8088/app-zht/ex/api.do?reqType=effecDateAndEndDate";
        String json="[\"SHZVJ6SMHZ9U5TCLL\",\"SHZVJ6SMHZ9U5TCLL\",\"S0000000000000003\"]";
        
        String r=post(url,json);
        System.out.println(r);
    }
    
    
}

分享到:
评论

相关推荐

    java发送http请求

    - `sendGet(String urlString, Map, String> params)`:带有查询参数的GET请求,参数以键值对的形式拼接到URL。 - `sendGet(String urlString, Map, String> params, Map, String> propertys)`:除了查询参数外,还...

    发送Post请求,内容格式为xml,并获取响应内容

    7. **处理响应**:通过`BufferedReader`读取响应流,并将其转换为字符串形式的响应内容,以便进一步处理或展示。 #### 三、代码优化与注意事项 1. **异常处理**:代码示例中没有完整展示异常处理逻辑,实际应用中...

    .net通过文件流获取对方请求过来的文件

    当客户端通过HTTP上传文件时,数据通常以POST请求的形式发送。服务器端需要解析这个请求,提取出文件数据,并将其保存到本地磁盘。以下是一个基本的步骤分解: 1. **创建HTTP监听器**:使用`HttpListener`类创建一...

    C#实现通过HttpWebRequest发送POST请求实现网站自动登陆

    4. **发送请求**:通过`GetRequestStream`方法获取请求流,并将数据写入流中。 5. **接收响应**:发送完数据后,调用`GetResponse`方法获取响应对象,并读取返回的内容。 #### 示例代码分析 下面是一个具体的示例...

    安卓客户端发送POST请求到服务器demo源代码

    - 发送请求,包括打开输出流,写入数据,关闭流等。 - 处理服务器响应,这可能涉及解析响应体(如JSON或XML),并将其转化为相应的Java对象。 - 错误处理,包括网络异常、服务器返回错误码等。 在实际开发中,你还...

    java使用url发送post和get请求:HttpConnUtils.jar

    - 对于POST请求,参数通常以键值对形式组织成字符串,然后写入到输出流中。 4. **使用HttpURLConnection** - Java内置的`HttpURLConnection`是处理HTTP请求的标准API,提供了设置请求方法、添加请求头、处理响应...

    post提交,图片以文件流形式上传并保存到数据库

    "Post提交,图片以文件流形式上传并保存到数据库"这一技术主题涉及到的是HTTP的POST请求方式、文件流处理以及数据库存储。以下是对这个主题的详细解释: 1. **POST请求**: POST请求是HTTP协议中的一个方法,用于...

    Python-One一个信息拉取定时以邮件形式发送

    标题中的"Python-One一个信息拉取定时以邮件形式发送"是指使用Python编程语言来实现一个自动的信息订阅服务。这个服务可以定期从特定的网络资源(可能是网页、API接口或者其他数据源)获取信息,并通过电子邮件的...

    requests发送请求练习运行结果

    描述中的“发送请求练习运行结果”可能指的是通过`requests`库获取某些资源后的输出。文件名列表中的`.mp3`文件可能是从某个网站下载的音频资源。使用`requests`库下载文件,可以利用`requests.get()`的`stream=True...

    android发送post请求获取json字符串

    - 发送请求并获取响应,可以使用`execute()`同步方法或`enqueue()`异步方法。对于JSON响应,可以使用`Gson`或`Jackson`等库进行解析。 无论使用哪种方式,解析JSON字符串都是关键步骤。Android SDK提供了`org.json...

    JS构造一个html文本内容成文件流形式发送到后台

    总结一下,JS构造HTML文本内容成文件流形式发送到后台的步骤包括: 1. 创建HTML字符串。 2. 将HTML字符串转换为Blob对象。 3. 创建FormData对象并添加Blob。 4. 使用axios或fetch发送POST请求,附带FormData,并指定...

    API POST发送数据支持二进制

    另一种方式是直接使用FormData对象,它可以携带二进制数据,并且在HTTP请求中以多部分/表单数据形式发送。 4. **API接口设计**: 设计支持二进制数据的API接口时,需要考虑以下几点: - 接口文档应明确说明支持的...

    Java后端HttpClient Post提交文件流 及服务端接收文件流

    HttpClient Post提交多文件及多个普通参数,已经封装成工具类。 需传入 要请求的url 普通参数map 例 map.put("param1","张三"); 需要传入的文件流map 其中key为文件名 服务端接收无乱码。

    java模拟发送form-data的请求方式

    Java 模拟发送 Form-Data 的请求方式 Java 模拟发送 Form-Data 的请求方式是指在 Java 语言中模拟浏览器发送 Form-Data 格式的 HTTP 请求的方法。Form-Data 是一种常见的 HTTP 请求体格式,广泛应用于文件上传、...

    二进制流形式上传图片,然后前台显示图片示例(vs2005+sql2005)

    在IT领域,尤其是在Web开发中,将图片以二进制流的形式存储在数据库中是一种常见的做法,这在处理大量图像数据或需要高效访问时尤其有用。本示例以Visual Studio 2005 (VS2005) 和 SQL Server 2005 (SQL2005) 为开发...

    android网络编程之http发送/请求服务

    当Android客户端发送请求到服务器后,服务器接收到请求,解析请求头和请求体,然后执行相应的业务逻辑,最后将结果以HTTP响应的形式返回给客户端。 JSP文件是一种动态网页技术,可以结合HTML、Java代码和内置的JSP...

    nextjs中实现openAI中文本补全功能,以流的形式输出

    在Next.js框架中实现OpenAI的文本补全功能并以流的形式输出,涉及到的技术栈包括JavaScript、Node.js、Next.js框架、以及OpenAI的API接口。这个项目的主要目的是利用OpenAI的强大自然语言处理能力,在前端展示时模拟...

    c# rest http请求类库

    RestSharp是一个强大的、轻量级的C# HTTP客户端库,它提供了简单易用的API来发送RESTful请求并处理响应。通过使用RestSharp,开发者可以方便地执行GET、POST、PUT、DELETE等HTTP方法,并处理JSON、XML或者其他形式的...

    java发送http get请求的两种方法(总结)

    使用流的形式发送 GET 请求需要创建一个 URL 对象,并使用 openStream() 方法获取输入流,然后使用 BufferedReader 读取响应数据。 代码实现: ```java public String sendGetRequest(String getUrl) { ...

Global site tag (gtag.js) - Google Analytics