2017-09-11 33 views
-1

我想創建一個http post請求而不使用任何庫,如java.net.HttpUrlConnection,java.net.URLConnection,URL Java中的.openConnection()等。但是互聯網上的每一個例子都使用了像HttpUrlConnection這樣的庫。任何人都可以請幫我創建一個Post請求登錄在Java網站?創建並使用http POST請求登錄到網站而不使用HttpUrlConnection庫或其他庫

+0

什麼是與這個庫中的問題?我敢肯定,其他lib都會在內部封裝,因爲沒有人希望實現讀取和分析TCP/IP連接的字節流。你確定你真的想這麼做嗎? – Zilvinas

+0

你好,歡迎來到Stackoverflow!您可能需要[參觀](https://stackoverflow.com/tour),[閱讀主題頁面](https://stackoverflow.com/help/on-topic)和[操作方法-ask頁面](https://stackoverflow.com/help/how-to-ask)。對於你的問題,一個簡單的谷歌搜索產生[這個結果](https://www.javatpoint.com/example-of-login-form-in-servlet) – Turing85

+0

嗨@Zilvinas,這是一個項目,我們必須不' t使用HttpUrlConnection。我知道這是一個非常有用的圖書館。但是我們需要從頭開始創建我們的請求。 –

回答

0

您將需要使用低級網絡直接與java.net.Socket對象一起工作。也許最好的地方是Java sockets tutorial,然後檢查其中的示例回聲客戶端。這將告訴你如何連接到服務器,然後讀寫數據。

爲了構建所需的消息,您還需要了解HTTP POST。這個話題太詳細了,不能在這裏討論,所以你需要一些閱讀。

這裏是發送一個簡單的硬編碼的POST請求在服務器上本地主機上運行的程序:1234:

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

public class SendPost { 
    public static void main(String[] args) { 
     try { 
      String post_request = "POST /login HTTP/1.1\r\nHost: localhost:1234\r\nContent-Length: 41\r\nContent-Type: application/x-www-form-urlencoded\r\n\r\nusername=bob%40test.com&password=i+forget"; 

      Socket s = new Socket("localhost", 1234); 
      DataOutputStream out = new DataOutputStream(s.getOutputStream());   
      out.writeBytes(post_request);   
      s.close(); 
     } catch(Exception e) { 
      System.out.println(e); 
     } 
    } 
} 

這只是發送包含用戶名和使用相同格式的密碼POST請求如果您使用它來提交登錄表單,那麼您的瀏覽器會這樣。

的(大量簡化的)請求如下所示:

 
POST /login HTTP/1.1 
Host: localhost:1234 
Content-Length: 41 
Content-Type: application/x-www-form-urlencoded 

username=bob%40test.com&password=i+forget 
+0

非常感謝你@mhawke。 –

+0

這是一個非常好的例子,我想我可以在閱讀HTTP POST請求結構之後進行第一次嘗試。您能否讓我知道您的用戶名和密碼值是什麼?我看到nusername = bob%40test.com&password = i + forget「,但是你的用戶名是bob%40test.com還是隻是bob?不好意思,但是因爲我想在我的登錄頁面上進行測試,所以我需要知道什麼是在我的請求中使用用戶名和密碼的確切格式 –

+0

用戶名是'bob @ test.com',密碼是'i forget',這說明在處理HTTP時它並不總是直截了當,每個值都是「 URL編碼「(AKA [百分比編碼](https://en.wikipedia.org/wiki/Percent-encoding)),以便非ASCII字符或其他可能具有特殊含義的字符被百分比編碼以避免誤解。在這種情況下,'@'已被'%40'替代,''空格替換爲'+'。 – mhawke