HTML response from server

后端 未结 8 1583
爱一瞬间的悲伤
爱一瞬间的悲伤 2021-01-13 11:21

I have an app that submits some from data to a local server and as a result the server will send back a JSON. say {status:\"success\"}

Its working when I run the ap

相关标签:
8条回答
  • 2021-01-13 11:29

    you got error from server that's why this type of data get in response.

    Try to handle error at server side, see what type of data server get when you send request from you application, and how server handle it.

    EDIT: In my case this works,

    JSONObject jsonObject = new JSONObject();
               jsonObject.put("key1", value1);             
               jsonObject.put("key2", value2); 
    
    JSONArray jArrayParam = new JSONArray();             
              jArrayParam.put(jsonObject);              
    
    List<NameValuePair> nameValuePair = new ArrayList<NameValuePair>();
                        nameValuePair.add(new BasicNameValuePair("bulkdata",jArrayParam.toString()));              
    
    Log.e("bulkdata", jArrayParam.toString());          
    
    HttpClient httpclient = new DefaultHttpClient();
    
    HttpPost httppost = new HttpPost("yor remote server url");          
             httppost.addHeader("Content-Type", "application/x-www-form-urlencoded");
             httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs, HTTP.UTF_8));         
    
    // Execute HTTP Post Request         
    HttpResponse response = httpclient.execute(httppost);         
    
    // get response entity         
    HttpEntity entity = response.getEntity(); 
    
               if (entity != null)       
                 {             
                   InputStream is = entity.getContent();             
    
                     // convert stream to string            
                     result = convertStreamToString(is);              
                     result = result.replace("\n", "");      
                   }
    

    and this is the method convertStreamToString(is);

    public static String convertStreamToString(InputStream is) throws Exception {      
           BufferedReader reader = new BufferedReader(new InputStreamReader(is, "UTF-8"));
           StringBuilder sb = new StringBuilder();     
           String line = null;     
           while ((line = reader.readLine()) != null) 
                 {         
                  sb.append(line + "\n");     
                  }     
            is.close();     
         return sb.toString(); 
         } 
    
    0 讨论(0)
  • 2021-01-13 11:29

    that's because the server replied with the html of an error page - not exactly json-parseable.

    0 讨论(0)
  • 2021-01-13 11:31

    Just check this line:

    W/System.err( 8190): org.json.JSONException: A JSONObject text must begin with '{' at character 2 of 
    

    I am sure you have made a mistake while creating/encoding JSON object on server side.

    0 讨论(0)
  • 2021-01-13 11:31

    There is nothing wrong in your Java code. The problem is in the server side. It has happened once to me also, but my server team changed the server and it solved the issue.

    In short, HTTP Error 417 indicates there was a problem in the application data transfer, whereby the server did not receive all of the packets it was anticipating (or they were out of order). This error is only thrown by websites that use CheckUpDown. This is an issue with CheckUpDown's servers, so there is little you can do. You may want to inform wallbase.cc's administrator of your issue via their public forum.

    0 讨论(0)
  • 2021-01-13 11:32

    Maybe this is a problem with the defaults used by DefaultHttpClient (User-Agent string, strict transfer encoding, etc.)? Try using AndroidHttpClient instead of DefaultHttpClient. Its defaults may be more compatible http://developer.android.com/reference/android/net/http/AndroidHttpClient.html

    If that doesn't work, you may need to compare the HTTP headers being sent by the working iPhone, emulator clients to those of the broken Galaxy client and update settings accordingly.

    0 讨论(0)
  • 2021-01-13 11:32

    alright rahul have you tried any different kind of response handling for the HTTP Post protocol

    i use some thing like this.

    try {
                     String params;
                     String encodedDataLength;
                    connectURL = new URL(_uRL); 
    
                     params = "Blah... Blah... blah;
    
                     encodedDataLength = "" + params.length();
    
    
                     conn =  (HttpURLConnection) connectURL.openConnection();
    
    
                     //conn.setDoInput(true);
                    conn.setDoOutput(true); // signify a post communcation protocol
    
    
    
                    conn.setRequestProperty("User-Agent","mobile");
                    conn.setRequestProperty("Content-Language", "en-US");
                    conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
                    conn.setRequestProperty( "Content-Length", encodedDataLength);
    
                    //System.out.println("con :" + conn);
                    os = conn.getOutputStream();
                    os.write(params.getBytes());
    
                    os.flush();
    
                    // Getting the response code will open the connection,
                    // send the request, and read the HTTP response headers.
                    // The headers are stored until requested.
    
    
                    is = conn.getInputStream();
    
                    // get session from the cookie
                    String cookie = conn.getHeaderField("cookie");
                    if (cookie != null) {
                        session = cookie;
    
                    }
    
    
                    // Get the length and process the data
                    BufferedReader br = new BufferedReader(new InputStreamReader(is));
                    responseString = br.readLine();
    
                    //System.out.println(responseString);
    
    
    
                } catch (Exception e) {
                    //java.lang.System.out.println("http exception: " + e.printStackTrace());
    
    
    
    
    
    
                } finally {
                    try {
                        if (is != null)
                            is.close();
                        if (os != null)
                            os.close();
                        if (conn != null)
                            conn.disconnect();
                    } catch (Exception e) {
                        e.printStackTrace();
                    }
                }
    

    after this is done... you can just insert any Json decoding methodology to retrive the data from the string called resposeString.

    Below are the included import files for this implementation. I know there are different for those.

    import java.io.*;
    import java.net.URL;
    import java.net.HttpURLConnection;
    import java.util.zip.GZIPInputStream;
    import java.lang.String;
    
    0 讨论(0)
提交回复
热议问题