2015-05-04 40 views
0

我想在我的Android应用程序中发送GET消息。在我想接收GET响应为200 OK后。但我没有完成。我收到了408请求超时日期或没有任何内容。你可以帮我吗?为什么不成功“带有套接字的HTTP GET请求”?

String requestmsg = "GET/HTTP/1.1\r\n"; 
    requestmsg += "Host: www.ktu.edu.tr\r\n"; 
    requestmsg += "Connection: keep-alive\r\n"; 
    requestmsg += "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8\r\n"; 
    requestmsg += "User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW 64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2311.135 Safari/537.36\r\n"; 
    requestmsg += "Accept-Encoding: gzip, deflate, sdch\r\n"; 
    requestmsg += "Accept-Language: en-US,en;q=0.8,en-GB;q=0.6\r\n"; 


    DataOutputStream dos = null; 
    BufferedReader dis = null; 
    try { 

     Log.d("ClientActivity", "Connecting..."); 
     String addr = InetAddress.getByName("www.ktu.edu.tr").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: Sent."); 
      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); 
    } 

回答

0

(套接字需要一些努力,你可能更喜欢不同的方法标准JSE之一将是URL.openConnection。)

指定编码,否则它是默认enocding - 不可移植。

new InputStreamReader(socket.getInputStream(), "Windows-1252")); 

同为反方向:

requestmsg.getBytes("Windows-1252") 

这是由于Windows Latin-1的,该浏览器即使指定了更有限的Latin-1 “ISO-8859-1” 会接受。稍后检查编码。

发送报头可以最好不要说,这是准备用压缩:

//requestmsg += "Accept-Encoding: gzip, deflate, sdch\r\n"; 

并与一个空行关闭请求报头:

requestmsg += "\r\n"; 

甲的BufferedOutputStream是更合适的是一个DataOutputStream类恕我直言。

0

首先,您忘了在最后加入另一个\r\n行,以便正确完成请求。其次,您正在读取从服务器获得的所有内容,而不确定响应的实际时间。

请使用HTTP库,或通过学习the HTTP specification学会正确使用HTTP协议。

0

你的确需要为别人已经告诉过你一个结束requestmsg += "\r\n";

你最好删除线requestmsg += "Accept-Encoding: gzip, deflate, sdch\r\n";readLine()不能处理压缩的内容。

但是,你的代码也会导致SocketTimeoutException。你应该分开收集。

你的代码是好的,如果做到我的服务器,并与String host = "nl3.php.net";

相关问题