運用Java進行Http表單資料自動認可

來源:互聯網
上載者:User

標籤:

統一的URL編碼

package demo0808.demo2;/** * 由於網路上HTTP的POST請求需要進行編碼 * 以此來適應不同的作業系統 * 編碼成統一的ASCII字元 * 本類對Query語句進行URL編碼 * 索引值對中間用=串連 * 不同的索引值對用&串連 */import java.net.URLEncoder;public class QueryString {private StringBuilder query=new StringBuilder();private String charset="UTF-8";/** * 無參預設建構函式 */public QueryString() {}/** *  同步添加索引值對 * @param name 參數名稱 * @param value 參數值 */public synchronized void add(String name,String value) {query.append(‘&‘);encode(name,value);}/** * 同步進行URL編碼 * @param name 參數名稱 * @param value 參數值 */private synchronized void encode(String name,String value) {try {query.append(URLEncoder.encode(name, charset));query.append(‘=‘);query.append(URLEncoder.encode(value,charset));} catch (Exception ex) {System.err.println("Bad VM can‘t support "+charset);}}/** * 同步擷取查詢字串 * @return 字串 */public synchronized String getQuery() {return query.toString();}/** * 覆蓋toString()方法 */public String toString() {return getQuery();}}

基於Http的post請求索引值對填寫

package demo0808.demo2;/** * 針對HTTP協議的POST請求 * 表單自動填寫 * 不考慮驗證碼識別 * 不考慮https類型的協議 */import java.io.InputStream;import java.io.OutputStream;import java.io.OutputStreamWriter;import java.net.URL;import java.net.URLConnection;public class FormPoster {private URL url;private QueryString queryString=new QueryString() ;/** * 建構函式 * @param url 統一資源位置符號 */public FormPoster(URL url) {if(!url.getProtocol().toLowerCase().startsWith("http")) {System.err.println("Post只用於http協議!");return;}this.url=url;}/** *  添加參數-值對 * @param name 參數名稱 * @param value 參數值 */public void add(String name,String value) {queryString.add(name, value);}/** * 擷取URL * @return URL  */public URL getURL() {return url;}/** *  擷取網站相應的輸入資料流 * @return 輸入資料流 * @throws Exception 無法串連異常 */public InputStream post() throws Exception {URLConnection openConnection = url.openConnection();openConnection.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.0; Windows NT; DigExt)");openConnection.setDoOutput(true);OutputStream outputStream = openConnection.getOutputStream();OutputStreamWriter outputStreamWriter = new OutputStreamWriter(outputStream,"UTF-8");outputStreamWriter.write(queryString.toString());outputStreamWriter.write("\r\n");outputStreamWriter.flush();outputStreamWriter.close(); //重新整理關閉流很重要,只有關閉了,才能擷取輸入資料流return openConnection.getInputStream();}}




測試代碼

package demo0808.demo2;/** * 測試代碼 */import java.io.File;import java.io.FileOutputStream;import java.io.InputStream;import java.io.InputStreamReader;import java.io.OutputStreamWriter;import java.net.URL;public class Test {public static void main(String[] args) throws Exception {URL url = new URL("https://uniportal.huawei.com/uniportal/login.do");FormPoster formPoster = new FormPoster(url);/** * 以下是測試華為招聘網站登陸介面 */formPoster.add("actionFlag", "loginAuthenticate");formPoster.add("lang", "zh");formPoster.add("redirect", "http://career.huawei.com/recruitment/login_index.html?redirect=http://career.huawei.com/recruitment/");formPoster.add("uid", "使用者名稱");formPoster.add("password", "密碼`");InputStream inputStream = formPoster.post();InputStreamReader inputStreamReader = new InputStreamReader(inputStream);File file=new File("outfile");FileOutputStream fileOutputStream = new FileOutputStream(file);OutputStreamWriter outputStreamWriter = new OutputStreamWriter(fileOutputStream,"UTF-8");int c;while((c=inputStreamReader.read())!=-1) {System.out.print((char)c);outputStreamWriter.write((char)c);}inputStream.close();outputStreamWriter.close();System.out.println();}}



運用Java進行Http表單資料自動認可

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.