簡體   English   中英

Android - 使用 HttpURLConnection 將 XML 文件發送到 PHP API 服務器

[英]Android - Send XML file to PHP API server using HttpURLConnection

所以目前,我正在嘗試將一些數據以 XML 文件的形式導入服務器。 我已成功登錄並通過服務器的 API 執行所有操作。 網站/服務器以 XML 響應,不確定這是否相關。

當我使用 API 的導入數據操作時,請求方法實際上是 GET 而不是 POST,響應內容類型是 text/xml。 我想嚴格堅持使用 HttpURLConnection 並且我知道發送此 XML 文件將需要一些多部分內容類型的東西,但我不確定如何從這里開始。 我看過這兩個例子,但它不適用於我的應用程序(至少不是直接)。 此外,我真的不明白他們從哪里得到一些請求標頭。

android中發送.txt文件、文檔文件到服務器

http://alt236.blogspot.ca/2012/03/java-multipart-upload-code-android.html

一位開發人員的消息說“要上傳數據,請使用 action=importData&gwID=nnnn 並使用通常的多部分內容編碼,並像往常一樣將文件放在請求正文中。”

我如何通過它的 API 將我的 XML 文件發送到我的服務器?

這是你如何做的:

    public void postToUrl(String payload, String address, String subAddress) throws Exception
    {
      try
      {
        URL url = new URL(address);
        URLConnection uc = url.openConnection();
        HttpURLConnection conn = (HttpURLConnection) uc;
        conn.setDoInput(true);
        conn.setDoOutput(true);
        conn.setRequestMethod("POST");
        conn.setRequestProperty("Content-type", "text/xml");        
        PrintWriter pw = new PrintWriter(conn.getOutputStream());
        pw.write(payload);
        pw.close();
        BufferedInputStream bis = new BufferedInputStream(conn.getInputStream());
        bis.close();

      }
      catch (Exception e)
      {
        e.printStackTrace();
      }
    }

這是我使用 HttpURLConnection 實現的多部分表單數據上傳。

public class WebConnector {
String boundary = "-------------" + System.currentTimeMillis();
private static final String LINE_FEED = "\r\n";
private static final String TWO_HYPHENS = "--";


private StringBuilder url;
private String protocol;
private HashMap<String, String> params;
private JSONObject postData;
private List<String> fileList;
private int count = 0;
private DataOutputStream dos;

public WebConnector(StringBuilder url, String protocol,
                    HashMap<String, String> params, JSONObject postData) {
    super();
    this.url = url;
    this.protocol = protocol;
    this.params = params;
    this.postData = postData;
    createServiceUrl();
}

public WebConnector(StringBuilder url, String protocol,
                    HashMap<String, String> params, JSONObject postData, List<String> fileList) {
    super();
    this.url = url;
    this.protocol = protocol;
    this.params = params;
    this.postData = postData;
    this.fileList = fileList;
    createServiceUrl();
}

public String connectToMULTIPART_POST_service(String postName) {


    System.out.println(">>>>>>>>>url : " + url);

    StringBuilder stringBuilder = new StringBuilder();

    String strResponse = "";
    InputStream inputStream = null;
    HttpURLConnection urlConnection = null;

    try {
        urlConnection = (HttpURLConnection) new URL(url.toString()).openConnection();
        urlConnection.setRequestProperty("Accept", "application/json");
        urlConnection.setRequestProperty("Connection", "close");
        urlConnection.setRequestProperty("User-Agent", "Mozilla/5.0 ( compatible ) ");
        urlConnection.setRequestProperty("Authorization", "Bearer " + Config.getConfigInstance().getAccessToken());
        urlConnection.setRequestProperty("Content-type", "multipart/form-data; boundary=" + boundary);

        urlConnection.setDoOutput(true);
        urlConnection.setDoInput(true);
        urlConnection.setUseCaches(false);
        urlConnection.setChunkedStreamingMode(1024);
        urlConnection.setRequestMethod("POST");
        dos = new DataOutputStream(urlConnection.getOutputStream());

        Iterator<String> keys = postData.keys();
        while (keys.hasNext()) {
            try {
                String id = String.valueOf(keys.next());
                addFormField(id, "" + postData.get(id));
                System.out.println(id + " : " + postData.get(id));
            } catch (JSONException e) {
                e.printStackTrace();
            }
        }
        try {
            dos.writeBytes(LINE_FEED);
            dos.flush();
            dos.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        if (fileList != null && fileList.size() > 0 && !fileList.isEmpty()) {
            for (int i = 0; i < fileList.size(); i++) {

                File file = new File(fileList.get(i));
                if (file != null) ;
                addFilePart("photos[" + i + "][image]", file);
            }
        }
        // forming th java.net.URL object

        build();
        urlConnection.connect();
        int statusCode = 0;
        try {
            urlConnection.connect();
            statusCode = urlConnection.getResponseCode();
        } catch (EOFException e1) {
            if (count < 5) {
                urlConnection.disconnect();
                count++;
                String temp = connectToMULTIPART_POST_service(postName);
                if (temp != null && !temp.equals("")) {
                    return temp;
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
        // 200 represents HTTP OK
        if (statusCode == HttpURLConnection.HTTP_OK) {
            inputStream = new BufferedInputStream(urlConnection.getInputStream());
            strResponse = readStream(inputStream);
        } else {
            System.out.println(urlConnection.getResponseMessage());
            inputStream = new BufferedInputStream(urlConnection.getInputStream());
            strResponse = readStream(inputStream);
        }
    } catch (Exception e) {
        e.printStackTrace();
    } finally {
        try {
            if (null != inputStream)
                inputStream.close();
        } catch (IOException e) {
        }
    }
    return strResponse;
}

public void addFormField(String fieldName, String value) {
    try {
        dos.writeBytes(TWO_HYPHENS + boundary + LINE_FEED);
        dos.writeBytes("Content-Disposition: form-data; name=\"" + fieldName + "\"" + LINE_FEED + LINE_FEED/*+ value + LINE_FEED*/);
        /*dos.writeBytes("Content-Type: text/plain; charset=UTF-8" + LINE_FEED);*/
        dos.writeBytes(value + LINE_FEED);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public void addFilePart(String fieldName, File uploadFile) {
    try {
        dos.writeBytes(TWO_HYPHENS + boundary + LINE_FEED);
        dos.writeBytes("Content-Disposition: form-data; name=\"" + fieldName + "\";filename=\"" + uploadFile.getName() + "\"" + LINE_FEED);
        dos.writeBytes(LINE_FEED);

        FileInputStream fStream = new FileInputStream(uploadFile);
        int bufferSize = 1024;
        byte[] buffer = new byte[bufferSize];
        int length = -1;

        while ((length = fStream.read(buffer)) != -1) {
            dos.write(buffer, 0, length);
        }
        dos.writeBytes(LINE_FEED);
        dos.writeBytes(TWO_HYPHENS + boundary + TWO_HYPHENS + LINE_FEED);
    /* close streams */
        fStream.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

public void addHeaderField(String name, String value) {
    try {
        dos.writeBytes(name + ": " + value + LINE_FEED);
    } catch (IOException e) {
        e.printStackTrace();
    }

}

public void build() {
    try {
        dos.writeBytes(LINE_FEED);
        dos.flush();
        dos.close();
    } catch (IOException e) {
        e.printStackTrace();
    }
}

private static String readStream(InputStream in) {
    StringBuilder sb = new StringBuilder();
    try {
        BufferedReader reader = new BufferedReader(new InputStreamReader(in));
        String nextLine = "";
        while ((nextLine = reader.readLine()) != null) {
            sb.append(nextLine);
        }
    /* Close Stream */
        if (null != in) {
            in.close();
        }
    } catch (IOException e) {
        e.printStackTrace();
    }
    return sb.toString();
}

private void createServiceUrl() {
    if (null == params) {
        return;
    }
    final Iterator<Map.Entry<String, String>> it = params.entrySet().iterator();
    boolean isParam = false;
    while (it.hasNext()) {
        final Map.Entry<String, String> mapEnt = (Map.Entry<String, String>) it.next();
        url.append(mapEnt.getKey());
        url.append("=");
        try {
            url.append(URLEncoder.encode(mapEnt.getValue(), "UTF-8"));
        } catch (UnsupportedEncodingException e) {
            e.printStackTrace();
        } catch (NullPointerException e) {
            e.printStackTrace();
        }
        url.append(WSConstants.AMPERSAND);
        isParam = true;
    }
    if (isParam) {
        url.deleteCharAt(url.length() - 1);
    }
}

}

暫無
暫無

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

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