簡體   English   中英

java.net如何觸發HTTP請求

[英]java.net How to fire an HTTP request

我使用java.net在我的Java客戶端發送HTTP請求,但我仍然無法實現/找到如何實際觸發請求。

例如,我有這個代碼:

Scanner sc = new Scanner(System.in);

System.out.println("Deleting subject...");
System.out.println("Subject shortcut (-1 for return):");
String shortcut = sc.next();
if( shortcut.equals("-1") )
    return ;

try
{
    URL url = new URL( "http://localhost:8080/Server/webresources/subject/delete/"+shortcut );
    HttpURLConnection con = (HttpURLConnection)url.openConnection();
    con.setDoOutput(true);
    con.setRequestMethod("DELETE");

    BufferedReader br = new BufferedReader( new InputStreamReader( con.getInputStream() ) );
    System.out.println( br.readLine() );
}catch( Exception e )
{
    System.out.println(e.getMessage());
}

在這段代碼中,如果我不使用這些行:

BufferedReader br = new BufferedReader( new InputStreamReader( con.getInputStream() ) );
System.out.println( br.readLine() );

請求永遠不會發送。 因此,在這種情況下,請求似乎是通過從連接調用InputStream來觸發的。

任何人都可以解釋我如何通過java.net觸發HTTP請求?

從文檔中,如果調用connect() ,或者如果調用依賴於連接的操作getInputStream()getInputStream() HttpURLConnection將連接。

如果尚未建立此類連接,則打開此URL引用的資源的通信鏈接 如果在已經打開連接時調用connect方法(由具有值true的連接字段指示),則忽略該調用。

URLConnection對象經歷兩個階段:首先創建它們,然后連接它們。 在創建之后,在連接之前,可以指定各種選項(例如,doInput和UseCaches)。 連接后,嘗試設置它們是錯誤的。 依賴於連接的操作 (如getContentLength) 在必要時隱式執行連接

但是 ,有幾個主題表明connect()不會提交實際請求,但getInputStream() (很可能是讀取服務器響應的任何方法,例如getResponseCode() )將:

Java URLConnection - 我什么時候需要使用connect()方法?

為什么HttpURLConnection不發送HTTP請求

如何在HttpURLConnection中發送PUT,DELETE HTTP請求?

每次調用此URL的協議處理程序的URLStreamHandler.openConnection(URL)方法時,都會創建一個新的URLConnection實例。

應該注意,URLConnection實例在創建時不建立實際的網絡連接。 只有在調用URLConnection.connect()時才會發生這種情況。 見javadoc

    String url = "http://example.com";

    URL obj = new URL(url);
    HttpURLConnection con = (HttpURLConnection) obj.openConnection();

    con.setRequestMethod("GET");

    //add request header
    con.setRequestProperty("User-Agent", USER_AGENT);

    int responseCode = con.getResponseCode();

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM