簡體   English   中英

通過Java中的終端向服務器發送HTTP PUT請求

[英]Send HTTP PUT request to server through terminal in Java

好。 我的問題是,當我嘗試通過Java中的終端向服務器“ http://scratch.mit.edu/ ”發送HTTP PUT請求到服務器時,得到的答復是該命令不存在。 所以我直接從終端嘗試了它。 仍然沒有用。 有沒有什么辦法可以不必安裝curl或類似的程序來做到這一點? 我將與其他一些人共享該程序,所以我不想讓他們安裝程序。 通過終端,我完全可以做到嗎? 或者,是否有WORKING Java命令? 我已經看到很多人還沒有測試它,並且它不起作用! 請幫我!!!! D:

這是我的程序(程序沒什么問題,只有找到正確的終端命令!D:)

    package com.mkyong.shell;

import java.io.BufferedReader;
import java.io.InputStreamReader;

public class ExecuteShellComand {
    public static void main(String[] args) {
        ExecuteShellComand obj = new ExecuteShellComand();
        int studio = 497688;
        String command = "PUT /site-api/users/curators-in/" +studio +"/remove/?usernames=arinerron HTTP/1.1 \nHost: scratch.mit.edu \nAccept: */* \nAccept-Encoding: gzip,deflate,sdch \nAccept-Language: en-US,en;q=0.8 \nCookie: __qca=P0-1926269269-1400108554400; scratchcsrftoken=cQBcHRVvjG3LsQROJdCq1Ljmdi4bWnjB; scratchsessionsid=c36fe777199a51f3556f4ab97c62cc0a; __utma=133675020.292999539.1399158737.1406949614.1406996049.322; __utmb=133675020.85.9.1407000438801; __utmc=133675020; __utmz=133675020.1406740512.306.14.utmcsr=google|utmccn=(organic)|utmcmd=organic|utmctr=(not%20provided) \nDNT: 1 \nOrigin: http://scratch.mit.edu \nReferer: http://scratch.mit.edu/studios/" +studio +"/curators/ \nUser-Agent: Mozilla/5.0 (X11; Linux i686) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/34.0.1847.116 Chrome/34.0.1847.116 Safari/537.36 \nX-CSRFToken: cQBcHRVvjG3LsQROJdCq1Ljmdi4bWnjB \nX-Requested-With: XMLHttpRequest \nHTTP/1.1 200 OK \nAccept-Ranges: bytes \nAccess-Control-Allow-Credentials: true \nAccess-Control-Allow-Headers: Content-Type, Depth, User-Agent, X-File-Size, X-Requested-With, If-Modified-Since, X-File-Name, Cache-Control \nAccess-Control-Allow-Methods: OPTIONS, GET, POST \nAccess-Control-Allow-Origin: * \nAge: 0 \nConnection: keep-alive \nContent-Encoding: gzip \nContent-Language: en \nContent-Length: 287 \nContent-Type: text/html; charset=utf-8 \nDate: Sat, 02 Aug 2014 17:33:19 GMT \nServer: Scratch Web Server \nVary: Accept-Encoding, Accept-Language, Cookie \nVia: 1.1 varnish \nX-Cache: MISS \nX-Cache-Hits: 0 \nX-Varnish: 1986766295";
        String output = obj.executeCommand(command);
        System.out.println(output); 
    }

    private String executeCommand(String command) {
        StringBuffer output = new StringBuffer();
        Process p;
        try {
            p = Runtime.getRuntime().exec(command);
            p.waitFor();
            BufferedReader reader = 
                            new BufferedReader(new InputStreamReader(p.getInputStream()));
            String line = "";           
            while ((line = reader.readLine())!= null) {
                output.append(line + "\n");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
        return output.toString();

    }

}

編輯2017年9月:哈哈,這是一個非常愚蠢的問題。 那是在我學習Java的時候,所以我無法修復它。 那時我才12歲。 現在,我將為此使用Apache httpcomponents-HttpUrlConnection是非常糟糕的IMO,通過Java從終端發送http請求是一件很恐怖的事情。

有沒有什么辦法可以不必安裝curl或類似的程序來做到這一點?

沒有辦法。

UNIX / Linux或Windows命令外殼都沒有內置的支持來執行HTTP請求。 如果要通過外殼執行此操作,則需要安裝curlwget或某些等效程序。

但是,使用Java發出HTTP請求的一種(通常為1 )更好的方法是使用HttpURLConnection或Apache HttpComponents庫。 如果您正確使用它們,它們都可以工作。


1-如果要在本地文件系統之間傳輸大文件,則使用外部命令(例如curl可能會更有效。 但是,這是一個特例。

暫無
暫無

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

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