【问题标题】:Android HTTP Get responseAndroid HTTP 获取响应
【发布时间】:2015-04-24 18:00:53
【问题描述】:

我用套接字发送了一条 GET 消息。但不幸的是,GET 响应不是200 OK 的状态。回复是400 Bad request302 Found 等。我该如何解决这个问题?你能帮助我吗 ?

    String requestmsg = "GET / HTTP/1.1\r\n";
    requestmsg += "User-Agent: MYCUSTOMAGENT\r\n";
    requestmsg += "Accept-Language: en-us\r\n";
    requestmsg += "Accept-Encoding: gzip, deflate\r\n";
    requestmsg += "Connection: Keep-Alive\r\n";
    requestmsg += "Connection: close\r\n";
    requestmsg += "\r\n";

    DataOutputStream dos = null;
    BufferedReader dis = null;

    try {
        Log.d("ClientActivity", "Connecting...");
        String addr = InetAddress.getByName("www.facebook.com").getHostAddress().toString();
        Socket socket = new Socket(addr, 80);
        String data = "";

        try {
            Log.d("ClientActivity", "C: Sending command.");
            dos = new DataOutputStream(socket.getOutputStream());
            dis = new BufferedReader(new InputStreamReader(socket.getInputStream()));

            dos.write(requestmsg.getBytes());
            Log.i("ClientActivity", "RequestMsg Sent");
            StringBuilder sb = new StringBuilder();

            while ((data = dis.readLine()) != null) {
                sb.append(data);
            }

            Log.i("ClientActivity", "C: Received " + sb.toString());
        } catch (Exception e) {
            Log.e("ClientActivity", "S: Error", e);

        }
        socket.close();
        Log.d("ClientActivity", "C: Closed.");
    } catch (Exception e) {
        Log.e("ClientActivity", "C: Error", e);
    }

【问题讨论】:

  • requestmsg += "text/xml; charset=utf-8\r\n"; 行不是有效的标题行。除非您在发布问题时犯了复制错误?
  • 我已编辑。谢谢。你对这个问题有什么想法吗?

标签: java android http get response


【解决方案1】:

您似乎缺少Host: 标头,这是HTTP/1.1 请求所必需的。

【讨论】:

  • 但是我已经通过套接字( Socket socket = new Socket(addr, 80) )发送到主机。为什么 HTTL/1.1 需要主机?可以解决我的问题的其他原因吗?
  • 一个套接字连接到它在解析主机名时获得的IP地址,因此主机信息在这一层丢失了。并且因为侦听(IP、端口)对的服务器可以为多个主机提供服务,所以您需要将其作为标头提供。所以你可以让 1.2.3.4:80 服务example.comtoys.combunnies.com,但套接字只知道它连接到 1.2.3.4,而不是你请求的主机。见here
  • 我偶然发现了我的 GET 消息,但 GET 响应是“HTTP/1.1 400 No Content-Type :text /htmlX-FB-Debug: ..bla bla”。我的新 GET 请求消息是 String requestmsg = "GET / HTTP/1.1\r\n"; requestmsg += "用户代理:MYCUSTOMAGENT\r\n"; requestmsg += "主机:www.facebook.com"; requestmsg += "接受:*/*\r\n"; requestmsg += "连接:保持活动状态\r\n"; requestmsg += "\r\n";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-06-28
  • 2012-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多