HTTP/1.1 400错误请求Eclipse

unguejic  于 2023-04-20  发布在  Eclipse
关注(0)|答案(1)|浏览(174)

尝试用TDP编程套接字,在http客户端中有一些错误,我找不到,当我运行它时会带来错误。

package tcp.client;

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.net.Socket;
import java.net.SocketException;
import java.net.UnknownHostException;

import edu.uoc.dpcs.lsim.logger.LoggerManager.Level;
import lsim.library.api.LSimLogger;

public class HTTPclient {

    public HTTPclient() {
    }
            
    public String head(String http_server_address, int http_server_port){
        LSimLogger.log(Level.INFO, "start HTTPclient.head ");
        LSimLogger.log(Level.INFO, "HTTP server_address: " + http_server_address);
        LSimLogger.log(Level.INFO, "HTTP server_port: "    + http_server_port);

        /* Complete code  */
        
        String peticio = "HEAD /xai/xai.html HTTP/1.1\r\nAccept\r\n";

        LSimLogger.log(Level.INFO, peticio);

        String resposta = "";
        Socket socket;
        try {
            socket = new Socket(http_server_address, http_server_port);
            LSimLogger.log(Level.INFO, "Socket created");
            OutputStream output = socket.getOutputStream();
            PrintWriter writer = new PrintWriter(output, true);
            writer.println(peticio);
            LSimLogger.log(Level.INFO, "Request sent");

            BufferedReader inputFromServer = new BufferedReader(new InputStreamReader(socket.getInputStream()));
            String linia ;
            while ((linia = inputFromServer.readLine()) != null) {
                resposta += linia + "\r\n";
                LSimLogger.log(Level.TRACE, linia);
            }
            
            socket.close();

            LSimLogger.log(Level.INFO, "Response: " + resposta);
        } catch (SocketException e) {
            LSimLogger.log(Level.FATAL, e.getMessage());
            e.printStackTrace();
        } catch (UnknownHostException e) {
            LSimLogger.log(Level.FATAL, e.getMessage());
            e.printStackTrace();
        } catch (IOException e) {
            LSimLogger.log(Level.FATAL, e.getMessage());
            e.printStackTrace();
        }
        
        return resposta;
    }
}

代码已经完成了,根据测试问题,我只需要在字符串peticio的地方编写代码。
错误消息。
HTTP/1.1 400错误请求
有什么帮助吗?

cngwdvgl

cngwdvgl1#

消息的行尾必须硬编码或由打印机添加

String peticio = "HEAD /xai/xai.html HTTP/1.1\r\nAccept\r\n";
// println will send OS end-of-line so it might be just \n or \r
// better not depend on that
writer.print(peticio);
writer.print("\r\n");

或者

writer.print("HEAD /xai/xai.html HTTP/1.1\r\n");
    writer.print("Accept\r\n");
    writer.print("\r\n");

或者

writer.printf("%s\r\n", "HEAD /xai/xai.html HTTP/1.1");
    writer.printf("%s\r\n", "Accept");
    writer.printf("%s\r\n", "");

相关问题