`
superich2008
  • 浏览: 323133 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

Java 发送GET、POST请求(模拟浏览器操作)

阅读更多

java模拟浏览器操作,一般有五个步骤:

1、创建连接;

2、设置请求头信息

3、连接

4、设置请求参数

5、获取响应结果(包括响应头和内容)

 

 

下面以“中国国际航空航班信息查询”为例:

 

public static void main(String[] args)
    {       
        final String encode = "utf-8";
        final String website = "http://et.airchina.com.cn";
        final int connectTimeOut = 15000;
        final int readDataTimeOut = 50000;
        HttpURLConnection httpConn = null;
        String htmlContent = null;
        String requestCookie = null;
        String reqUrl = "/InternetBooking/AirLowFareSearchExt.do";
       
        try
        {
            // 第一次请求【POST】
            // 1、创建连接
            URL url = new URL(website + reqUrl);
            httpConn = (HttpURLConnection) url.openConnection();
            httpConn.setDoInput(true);
            httpConn.setDoOutput(true);
            httpConn.setUseCaches(false);
            httpConn.setConnectTimeout(connectTimeOut);
            httpConn.setReadTimeout(readDataTimeOut);
            // 2、设置请求头
            httpConn.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)");
            System.out.println("request url : " + reqUrl);
           
            // 3、连接
            httpConn.setRequestMethod("POST");
            httpConn.connect();
           
            // 4、设置请求参数
            OutputStream outStream = httpConn.getOutputStream();
            String postData = "tripType=OW&searchType=FARE&flexibleSearch=false&directFlightsOnly=false&fareOptions=1.FAR.X&outboundOption.originLocationCode=PEK&outboundOption.destinationLocationCode=SZX&outboundOption.departureDay=28&outboundOption.departureMonth=09&outboundOption.departureYear=2011&outboundOption.departureTime=NA&guestTypes%5B0%5D.type=ADT&guestTypes%5B0%5D.amount=4 &guestTypes%5B1%5D.type=CNN&guestTypes%5B1%5D.amount=0&guestTypes%5B2%5D.type=INF&guestTypes%5B2%5D.amount=0&pos=AIRCHINA_CN&lang=zh_CN&ajaxAction=true";
            outStream.write(postData.getBytes());
            outStream.flush();
            outStream.close();
           
            // 5、获取响应结果
            // 获取响应头信息
            Map<String, List<String>> resHeaderMap = httpConn.getHeaderFields();
            if (null != resHeaderMap
                    && false == resHeaderMap.isEmpty())
            {
                for (Map.Entry<String, List<String>> entry : resHeaderMap.entrySet())
                {
                    String key = entry.getKey();
                    String value = java.util.Arrays.toString(entry.getValue().toArray());
                    if (null != key
                            && "Set-Cookie".equals(key.trim()))
                    {
                        requestCookie = value;
                        requestCookie = requestCookie.replace("[", "");
                        requestCookie = requestCookie.replace("]", "");
                    }
                   
                    System.out.println(key + " : " + value);
                }
            }
           
            System.out.println("\n\nresponse cookie : " + requestCookie);
//            if (HttpURLConnection.HTTP_OK == httpConn.getResponseCode())
//            {
//                InputStream inStream = httpConn.getInputStream();
//                htmlContent = getContentByStream(inStream, encode);
//                System.out.println(htmlContent);
//            }

            // 第二次请求【POST】
            // 1、创建连接
            reqUrl = "/InternetBooking/AirFareFamiliesFlexibleForward.do";
            url = new URL(website + reqUrl);
            httpConn = (HttpURLConnection) url.openConnection();
            httpConn.setDoInput(true);
            httpConn.setDoOutput(true);
            httpConn.setUseCaches(false);
            httpConn.setConnectTimeout(connectTimeOut);
            httpConn.setReadTimeout(readDataTimeOut);
            // 2、设置请求头
            httpConn.setRequestProperty("User-Agent",
                    "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727)");
            if (null != requestCookie
                    && false == "".equals(requestCookie.trim()))
            {
                httpConn.setRequestProperty("Cookie", requestCookie);
            }
            System.out.println("request url : " + reqUrl);
           
            // 3、连接
            httpConn.setRequestMethod("POST");
            httpConn.connect();
           
            // 4、设置请求参数
            outStream = httpConn.getOutputStream();
            postData = "lang=zh_CN";
            outStream.write(postData.getBytes());
            outStream.flush();
            outStream.close();
           
            // 5、获取响应结果
            if (HttpURLConnection.HTTP_OK == httpConn.getResponseCode())
            {
                InputStream inStream = httpConn.getInputStream();
                htmlContent = getContentByStream(inStream, encode);
//                System.out.println(htmlContent);
               
                // 6、内容输入到文件中
                writeToFile(htmlContent);
            }
           
            System.out.println("================== crawl over. ");
        } catch (IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally
        {
            if (null != httpConn)
            {
                try
                {
                    httpConn.disconnect();
                } catch (Exception e)
                {
                }
            }
        } // end-try-catch-finally
       
    }

分享到:
评论

相关推荐

    java后台调用HttpURLConnection类模拟浏览器请求实例(可用于接口调用)

    在Java编程中,有时我们需要模拟浏览器发送HTTP请求,例如调用外部接口或API。`HttpURLConnection`是Java标准库提供的一种轻量级的HTTP客户端,它允许我们在后台代码中发送GET和POST请求。本篇文章将深入讲解如何...

    JAVA-用HttpClient来模拟浏览器GET,POST.docx

    JAVA使用HttpClient模拟浏览器GET、POST请求 在本文中,我们将介绍如何使用Apache Commons HttpClient库来模拟浏览器的GET和POST请求。HttpClient库是一个开放源码的项目,是Apache Commons项目的一部分,旨在简化...

    模拟浏览器发送http请求的工具

    Advanced REST Client(ARC)是一款强大的开发工具,专为这个目的设计,它允许用户模拟浏览器发送各种类型的HTTP请求,并查看详细的响应结果。这款工具对于前端开发者、后端开发者以及API测试人员来说都极具价值。 ...

    java模拟微信浏览器访问.rar

    - **HttpURLConnection**:Java标准库提供的基础HTTP客户端,可以用来发送GET和POST请求,模拟浏览器行为。 - **Apache HttpClient**:一个功能强大的HTTP客户端库,提供了更灵活和高效的API来处理HTTP请求。 - *...

    JAVA模拟网页发送请求

    本文详细介绍了如何使用Java模拟发送GET和POST请求,并对Cookie进行了处理。掌握了这些技术后,你就可以更灵活地与Web服务交互,实现自动化任务或数据抓取等功能。需要注意的是,在实际应用中还应考虑异常处理、编码...

    用HttpClient来模拟浏览器的GET,POST

    总结,HttpClient是Java中强大的HTTP客户端工具,通过它可以方便地模拟浏览器的GET和POST请求,同时提供了丰富的配置选项和源码供开发者深入研究。理解和掌握HttpClient的使用能提升开发效率,更好地应对网络通信的...

    java web中 HttpClient模拟浏览器登录后发起请求

    Java Web 中 HttpClient 模拟浏览器登录后发起请求是指在 Java Web 应用程序中使用 HttpClient 库模拟浏览器的行为,模拟浏览器登录到服务器,然后发起请求获取资源。这种技术广泛应用于爬虫、自动化测试、数据爬取...

    Java模拟get/post登陆(含验证码)

    本篇文章将深入探讨如何使用Java模拟GET/POST登录,特别是涉及验证码处理的情况。我们将主要关注Httpclient库的使用,以及可能涉及到的图像识别技术(OCR)。 首先,让我们了解一下HTTP的基本概念。HTTP是超文本...

    用HttpClient来模拟浏览器GET_POST

    使用HttpClient来模拟浏览器GET_POST HttpClient是一个Apache开源组织中的项目,隶属于Jakarta的commons项目,旨在简化HTTP客户端与服务器进行各种通讯编程。通过使用HttpClient,可以轻松地解决以前很头疼的事情,...

    如何用selenium封装post参数提交示例

    在某些场景下,我们需要模拟POST请求来与服务器进行数据交互,这通常是HTTP协议中的一个方法,用于发送数据到服务器以创建或更新资源。在描述中提到的,我们将探讨如何使用Selenium来封装POST参数并提交,以获取异步...

    HttpClient模拟http浏览器请求

    这个库广泛应用于Web服务调用、API接口测试以及自动化脚本中,因为它可以模拟浏览器的行为,进行GET、POST等复杂的HTTP请求。 在Java编程中,HttpClient提供了一个强大的API,允许我们创建自定义的HTTP请求,设置...

    JAVA发送HttpClient请求及接收请求完整代码实例

    它允许开发者模拟浏览器行为,向服务器发送GET、POST或者其他HTTP方法的请求,并接收服务器的响应。在本实例中,我们将深入探讨如何使用HttpClient来发送请求以及处理返回的数据。 首先,让我们了解HttpClient的...

    java发送http的get、post请求实现代码

    在Java编程中,发送HTTP...总的来说,Java中发送HTTP GET和POST请求涉及到网络编程的基本概念,包括URL、URLConnection、请求头和响应头的设置,以及数据的读写。了解这些知识对于进行Web服务开发和API调用至关重要。

    java发送http请求工具类

    默认是GET,若需发送POST请求,应调用`setRequestMethod("POST")`。 ```java connection.setRequestMethod("POST"); ``` 3. **设置请求属性**:可以设置请求头,如Content-Type、User-Agent等。例如: ```java ...

    浏览器发送模拟httpclient软件

    当我们谈论“浏览器发送模拟httpclient软件”时,我们指的是一个能够模拟浏览器行为的应用程序,允许用户通过编程方式执行HTTP请求,如POST和GET。 POST和GET是HTTP请求的两种主要方法。GET用于从服务器获取资源,...

    java模拟http请求登陆抓取海投网信息

    这些库允许我们构造POST请求,模拟用户登录过程,通常需要设置请求头(如User-Agent)、POST参数(如用户名和密码)以及可能的Cookie信息。 2. **登录过程模拟**:在海投网的登录过程中,可能需要处理验证码、...

    服务器端测试GET、POST

    为了测试这些功能,可以编写单元测试或集成测试,模拟不同的请求场景,包括携带不同数据的GET请求和POST请求,以及带有中文参数的情况。通过测试,可以确保服务器端在实际部署后能够稳定、准确地处理来自客户端的...

    运用java实现简单的浏览器功能

    通过`(HttpURLConnection) connection`转换类型,可以设置请求方法(如GET或POST)、设置请求头等。 4. **数据读取**:一旦连接建立,我们可以通过`InputStream`读取服务器返回的数据。例如:`BufferedReader in = ...

    模拟Http请求

    本文详细介绍了如何使用Apache HttpClient库在Java中模拟发送Http GET和POST请求的方法。通过这种方式,可以在开发过程中高效地进行测试、调试等工作。同时,Apache HttpClient还提供了更多高级功能,如SSL/TLS支持...

Global site tag (gtag.js) - Google Analytics