Jasey Hu
Jasey Hu

Reputation: 47

socket http request to tomcat, but response 302

when I use Postman to get result using url : "localhost:8080/examples", and I can get the correct result :

<!--
  Licensed to the Apache Software Foundation (ASF) under one or more
  contributor license agreements.  See the NOTICE file distributed with
  this work for additional information regarding copyright ownership.
  The ASF licenses this file to You under the Apache License, Version 2.0
  (the "License"); you may not use this file except in compliance with
  the License.  You may obtain a copy of the License at

      http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License.
-->
<!DOCTYPE HTML>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <title>Apache Tomcat Examples</title>
    </head>
    <body>
        <p>
            <h3>Apache Tomcat Examples
            </H3>
            <p></p>
            <ul>
                <li>
                    <a href="servlets">Servlets examples</a>
                </li>
                <li>
                    <a href="jsp">JSP Examples</a>
                </li>
                <li>
                    <a href="websocket/index.xhtml">WebSocket Examples</a>
                </li>
            </ul>
        </body>
    </html>

tomcat version : 8.5.32

but when I use socket to get result from tomcat server, then the result confuse me. Code is here :


public void httpTest(){

        Socket socket = new Socket("localhost", 8080);
        data = "GET /examples HTTP/1.1\n" +
                "Host: localhost:8080\n" +
                "Cache-Control: no-cache\n" +
                "Postman-Token: 60236fcd-995c-49d9-896c-f88a1bdfbfd3\n\n".getBytes();

        log.debug("receive http request :\r\n{}", new String(data));


        try {

            //向服务器端发送数据
            DataOutputStream out = new DataOutputStream(socket.getOutputStream());
            out.write(data);
            out.flush();

            //读取服务器端数据
            DataInputStream input = new DataInputStream(socket.getInputStream());
            byte[] result = readStream(input);

            log.debug("receive response :\r\n{}", new String(result));
            input.close();
            out.close();

            return result;
        } catch (Exception e) {
            log.error("请求本地服务数据异常, ", e);
            if (socket != null) {
                try {
                    socket.close();
                } catch (IOException e2) {
                    socket = null;
                    log.error("客户端关闭socket异常, " ,e);
                }
            }
            socket = null;
            return _404();
        }
}

the code result log is here :

[DEBUG] 2019-09-01 16:50:08,304 method:com.jasey.reverse.client.core.local.LocalHostSender.send(LocalHostSender.java:18)
receive http request :
GET /examples HTTP/1.1
Host: localhost:8080
Cache-Control: no-cache
Postman-Token: 60236fcd-995c-49d9-896c-f88a1bdfbfd3


[DEBUG] 2019-09-01 16:50:28,364 method:com.jasey.reverse.client.core.local.LocalHostSender.send(LocalHostSender.java:37)
receive response :
HTTP/1.1 302 
Location: /examples/
Transfer-Encoding: chunked
Date: Sun, 01 Sep 2019 08:50:08 GMT

0


HTTP/1.1 302 
Location: /examples/
Transfer-Encoding: chunked
Date: Sun, 01 Sep 2019 08:50:08 GMT

0

I don't known why, please help me

Upvotes: 0

Views: 2890

Answers (1)

lorenzo
lorenzo

Reputation: 622

Response code 302 means Redirect. Postman probably follows it, giving you the result.

The simplest thing in these cases, in my opinion, is to make the request using a simple library like Apache HttpClient.

Here is a useful tutorial for learn HttpClient library: https://www.tutorialspoint.com/apache_httpclient/index.htm

Here how to automatically follow the redirects: Handling HttpClient Redirects

Upvotes: 1

Related Questions