簡體   English   中英

錯誤500 HttpUrlConnection java

[英]Error 500 HttpUrlConnection java

我正在使用AsyncHttpClient向數據庫發出一些請求,並且運行正常。 但是,當我嘗試在手機上使用3g時,它根本無法正常工作。 這就是為什么我決定將HttpClient更改為HttpUrlConnection的原因(人們說在3g + wifi下它可以更好地工作)。 但是,當我編寫代碼時,我陷入了無法解決的緩沖區問題。 代碼是:

public class SendPostRequest extends AsyncTask<String, Void, String>{
    String base64CredenciaisCodificadas;
    HashMap postDataParam;
    @Override
    protected String doInBackground(String... url) {
        String response = "";
        try{
            URL link = new URL(url[0]);
            HttpURLConnection e = (HttpURLConnection)link.openConnection();
            e.setReadTimeout(15000);
            e.setConnectTimeout(15000);
            e.setRequestMethod("POST");
            e.setRequestProperty("Authorization", "Basic " + base64CredenciaisCodificadas);
            e.setDoInput(true);
            e.setDoOutput(true);
            e.setFixedLengthStreamingMode(getPostDataString(postDataParam).length());
            OutputStream os = e.getOutputStream();
            BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(os, "UTF-8"));
            writer.write(getPostDataString(postDataParam));
            writer.flush();
            writer.close();
            os.close();
            int responseCode = e.getResponseCode();
            if (responseCode == 200){
                //Code to get data from web service.
            }
        } catch(Exception e){

        }
        return response;
    }
    private String getPostDataString(HashMap<String, String> params) throws UnsupportedEncodingException {
        StringBuilder result = new StringBuilder();
        boolean first = true;
        Iterator var4 = params.entrySet().iterator();

        while(var4.hasNext()) {
            Map.Entry entry = (Map.Entry)var4.next();
            if(first) {
                first = false;
                result.append("?");
            } else {
                result.append("&");
            }

            result.append(URLEncoder.encode((String)entry.getKey(), "UTF-8"));
            result.append("=");
            result.append(URLEncoder.encode((String)entry.getValue(), "UTF-8"));
        }

        return result.toString();
    }
}

錯誤日志是:

10-25 15:16:11.128 30807-30898/petma.testesappcarona I/System.out: Stat: 500; Msg: buffer(com.android.okhttp.internal.http.HttpConnection$UnknownLengthSource@834db8).inputStream()

如果還有其他疑問,請詢問,我將發送其他數據。

編輯:這是機器人。 它已獲得互聯網許可。

常見原因 :Steam被錯誤的參數或其他未處理的異常關閉。

可能的原因 :在此代碼中從未分配HashMap postDataParam,因此在下面的代碼中傳遞了null。

      e.setFixedLengthStreamingMode(
       getPostDataString(postDataParam).length());

並且null參數導致com.android.okhttp.internal.http.HttpConnection$UnknownLengthSource@834db8).inputStream()

免費咨詢

  • 盡可能嘗試重用代碼示例

     you could have stored getPostDataString(postDataParam) in some variable since its getting used twice in your code. 
  • 如果可能,對網絡呼叫使用翻新

我解決了這個問題。 代碼沒問題。 我嘗試連接的Web服務只能通過GET請求訪問。 我將POST切換為GET,現在可以使用了!

但是,現在出現了一個新問題:切換到3g時,出現403:禁止訪問。 有任何想法嗎?

暫無
暫無

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

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