2014-10-07 31 views
1

如何在Java服務器應用程序中訪問HTTP PUT消息(JSON格式)? HTTP PUT從Python客戶端發送。解析RESTful PUT

Python客戶端到目前爲止:

import http.client 
    import urllib 

    values = {'s':'basic','submit':'search'} 
    data = urllib.parse.urlencode(values) 


    headers = headers['Content-length']=str(len(bytes(data, 'utf-8'))) 
    connection = http.client.HTTPConnection('localhost',8080) 
    connection.request("PUT", "/file", body=data.encode("utf-8")) 

當PUT獲取到Java服務器 - 我怎麼得到的消息(數據在Python)?

到目前爲止,這是我在Java中:

import java.io.*; 
import java.net.*; 

class JavaServer { 

    public static void main(String args[]) throws Exception { 

     String fromclient; 

     ServerSocket Server = new ServerSocket (8080); 

     System.out.println("TCPServer Waiting for client on port 8080"); 

     Socket connected = Server.accept(); 
     System.out.println(" THE CLIENT"+" "+ connected.getInetAddress() +":"+connected.getPort()+" IS CONNECTED "); 

     BufferedReader inFromClient = new BufferedReader(new InputStreamReader (connected.getInputStream())); 

     fromclient = inFromClient.readLine(); 
     System.out.println("RECIEVED:" + fromclient); 

    } 
} 
+1

我們需要更多信息 – DreadHeadedDeveloper 2014-10-07 16:18:05

+0

您是否使用普通java或帶有java ee的服務器? – rekiem87 2014-10-07 19:09:29

+0

純java,但會把它放在apache服務器上 – user4109372 2014-10-07 19:23:13

回答

2

您需要遍歷你的 「inFromClient」

因此,像:

while((fromclient = inFromClient.readLine()) != null){ 
     System.out.println("RECIEVED:" + fromclient); 
    } 
    inFromClient.close(); 
+0

謝謝。這確實奏效。我也剛剛發現這個StringBuilder buffer = new StringBuilder();字符串行; while((line = inFromClient.readLine())!= null){buffer.append(line); } System.out.println(「buffer.toString =」+ buffer.toString()); 這也適用,但是,JSON消息似乎有很多額外的字符,似乎混在一起。我是與JSON合作的新手。也許這是正常的,或者我需要雙引號。我實際上是發送時間和IP地址和值。數字是否需要特殊的JSON格式? – user4109372 2014-10-07 19:14:02

+0

它的工作效果很好,我在測試時遇到了問題,因爲它沒有脫離循環。無論如何,我改變了反饋!乾杯! =) – LMG 2014-10-07 19:16:04

+0

我注意到了。當pythonclient退出循環時退出。 python代碼可能需要更正。 – 2014-10-07 19:44:06

0

謝謝。這確實奏效。 我也剛剛發現這一點:

StringBuilder buffer = new StringBuilder(); 
String line; 
while ((line = inFromClient.readLine()) != null) { 
buffer.append(line); 
} 

System.out.println("buffer.toString = " + buffer.toString()); 

也可以工作,但是,JSON消息似乎有很多額外的人物,似乎混淆。我是與JSON合作的新手。也許這是正常的,或者我需要雙引號。我實際上是發送時間和IP地址和值。數字是否需要特殊的JSON格式?