因為工作需求, 需要自動的 Post 檔案到 Web Server 上, 故寫了這個小工具. 使用了 Apache Httpclient 4.x 的套件作為底層的開發.
分析頁面 :
第一步你需要做的便是分析上傳的頁面, 才能知到要 Post 到那邊去, 與使用的 parameter 名稱為何. 假設有頁面如下, 請按滑鼠右鍵分析頁面 :
接著從下面分析可以知道 "Post path" 與 "Post param name" :
範例代碼 :
有了這些頁面的資訊, 接著我們便可以來撰寫代碼利用 Post 將我們的檔案上傳到 Web server :
- PostEx.java
- package john.test;
- import java.io.File;
- import org.apache.http.HttpResponse;
- import org.apache.http.client.HttpClient;
- import org.apache.http.client.methods.HttpPost;
- import org.apache.http.entity.mime.HttpMultipartMode;
- import org.apache.http.entity.mime.MultipartEntity;
- import org.apache.http.entity.mime.content.FileBody;
- import org.apache.http.impl.client.DefaultHttpClient;
- import org.apache.http.util.EntityUtils;
- public class PostEx {
- public static void main(String[] args) throws Exception{
- String ip = "172.22.8.184";
- String cnt_type = "multipart/form-data";
- String paramName = "uploadedfile";
- String postFilePath = "test.txt";
- String url = String.format("http://%s/cgi-bin/upload.php", ip);
- HttpClient client = new DefaultHttpClient();
- int statusCode = -1;
- System.out.printf("\t[Info] Upload file='%s'...\n", postFilePath);
- HttpPost post = new HttpPost( url );
- MultipartEntity entity = new MultipartEntity( HttpMultipartMode.BROWSER_COMPATIBLE );
- File paramValue = new File(postFilePath);
- // For File parameters
- entity.addPart( paramName, new FileBody((( File ) paramValue ), cnt_type ));
- post.setEntity( entity );
- HttpResponse resp = client.execute(post);
- System.out.printf("\t[Info] Status Code=%d...\n", resp.getStatusLine().getStatusCode());
- String response = EntityUtils.toString( resp.getEntity(), "UTF-8" );
- System.out.printf("\t[Info] HTTP Response:\n%s\n", response);
- }
- }
如果你需要指定更詳細的 Content-type 讓後端 Web server 有更多資訊知道如何處理這個檔案, 你可以參考 Internet media type 並設定上面代碼的變數 cnt_type 為適當對應你上傳檔案副檔名的 MIME type 即可.
Supplement :
* Uploading files – multipart HTTP POST and Apache HttpClient
沒有留言:
張貼留言