2017-11-23 14 views
0

POSTリクエストからフォームデータを抽出する方法。 $ curl -X POST -d asdf = blah http://localhost:8000/proxy/http://httpbin.org/post - 私はasdf = blahを抽出する必要があります。JavaのPOSTリクエストからフォームデータを取得する方法

私が現在行っているやり方は、私が特定のフォーマットで読んでいるデータに大きく依存しています(私はフォームデータが常に最後の行にあると仮定しています)。読み込み中のデータのフォーマットに依存しないデータを得るためのよりよい(そして/またはもっと簡単な)方法がありますか?

(注:GETとPOSTリクエストの両方でプロキシのお得な情報):

public class ProxyThread3 extends Thread { 
private Socket clientSocket = null; 

private OutputStream clientOutputStream; 


private static final int BUFFER_SIZE = 32768; 

public ProxyThread3(Socket socket) { 
    super("ProxyThread"); 
    this.clientSocket = socket; 

} 


public void run() { 
    try { 

     clientOutputStream = clientSocket.getOutputStream(); 

     // Read request 
     InputStream clientInputStream = clientSocket.getInputStream(); 

     byte[] b = new byte[8196]; 
     int len = clientInputStream.read(b); 

     String urlToCall = ""; 


     if (len > 0) { 

      String userData = new String(b, 0, len); 

      String[] userDataArray = userData.split("\n"); 

      //Parse first line to get URL 
      String firstLine = userDataArray[0]; 
      for (int i = 0; i < firstLine.length(); i++) { 

       if (firstLine.substring(i).startsWith("http://")) { 

        urlToCall = firstLine.substring(i).split(" ")[0]; 
        break; 
       } 

      } 


      //get request type 
      String requestType = firstLine.split(" ")[0]; 

      String userAgentHeader = ""; 


      //get USER-AGENT Header and Accept Header 
      for (String data : userDataArray) { 

       if (data.startsWith("User-Agent")) { 

        userAgentHeader = data.split(":")[1].trim(); 
        break; 

       } 

      } 


      switch (requestType) { 

       case "GET": { 

        sendGetRequest(urlToCall, userAgentHeader); 
        break; 
       } 

       case "POST": { 


        String postParams = null; 

        //Get Form Data 
        if (!userDataArray[userDataArray.length - 1].isEmpty()) { 

         postParams = userDataArray[userDataArray.length - 1]; 

        } 

        sendPostRequest(urlToCall, userAgentHeader, postParams); 
        break; 
       } 


      } 

     } else { 
      clientInputStream.close(); 
     } 

    } catch (IOException e) { 
     e.printStackTrace(); 
    } finally { 
     try { 
      clientSocket.close(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 
} 


private void sendPostRequest(String urlToCall, String userAgentHeader, String postParams) throws IOException { 


    URL urlToWriteAndReadFrom = new URL(urlToCall); 

    HttpURLConnection httpURLConnection = (HttpURLConnection) urlToWriteAndReadFrom.openConnection(); 

    httpURLConnection.setRequestMethod("POST"); 

    // set User-Agent header 
    httpURLConnection.setRequestProperty("User-Agent", userAgentHeader); 


    httpURLConnection.setDoOutput(true); 

    OutputStream urlOutputStream = httpURLConnection.getOutputStream(); 

    if (postParams != null) { 
     urlOutputStream.write(postParams.getBytes()); 
     urlOutputStream.flush(); 

    } 


    urlOutputStream.close(); 

    int responseCode = httpURLConnection.getResponseCode(); 


    if (responseCode == HttpURLConnection.HTTP_OK) { // success 


     InputStream dataReader = httpURLConnection.getInputStream(); 


     //begin send response to client 
     byte inputInBytes[] = new byte[BUFFER_SIZE]; 

     assert dataReader != null; 

     int index = dataReader.read(inputInBytes, 0, BUFFER_SIZE); 

     while (index != -1) { 
      clientOutputStream.write(inputInBytes, 0, index); 
      index = dataReader.read(inputInBytes, 0, BUFFER_SIZE); 
     } 
     clientOutputStream.flush(); 


    } 


} 

private void sendGetRequest(String urlToCall, String userAgentHeader) throws IOException { 


    URL urlToReadFrom = new URL(urlToCall); 
    HttpURLConnection httpURLConnection = (HttpURLConnection) urlToReadFrom.openConnection(); 

    // set True since reading and getting input 
    httpURLConnection.setDoInput(true); 
    httpURLConnection.setRequestMethod("GET"); 

    // set User-Agent header 
    httpURLConnection.setRequestProperty("User-Agent", userAgentHeader); 

    int responseCode = httpURLConnection.getResponseCode(); 

    if (responseCode == HttpURLConnection.HTTP_OK) { // success 


     InputStream dataReader = httpURLConnection.getInputStream(); 


     //begin send response to client 
     byte inputInBytes[] = new byte[BUFFER_SIZE]; 

     assert dataReader != null; 

     int index = dataReader.read(inputInBytes, 0, BUFFER_SIZE); 

     while (index != -1) { 
      clientOutputStream.write(inputInBytes, 0, index); 
      index = dataReader.read(inputInBytes, 0, BUFFER_SIZE); 
     } 
     clientOutputStream.flush(); 


    } 


} 

}

PSここ

は、私が書いたコードです。私はこのすべてを初めて知っているので、コードにエラーがある場合は指摘してください。

答えて

0

ここでは、POSTとGET要求を処理するJava HTTPサーバーを作成する方法の完全な例を示します。

https://www.codeproject.com/Tips/1040097/Create-a-Simple-Web-Server-in-Java-HTTP-Server

共有され、これは非常に原始的ですが、私は任意のサードパーティのライブラリや軽量のJavaサーバGrizzlyまたはJettyのような場合ではない作られたJ2EEサーブレットを利用したApache Tomcatのようなサーバーを使用することをお勧めしたいことこの目的のために。

+0

ありがとうございます!この例は私がやっていたことではありませんでしたが、POSTリクエストからフォームデータを取得することで多くの助けになりました – freakin09

関連する問題