2015-05-15 13 views
7

मैं HTTP पोस्ट का उपयोग कर फ़ाइल अपलोड करने के लिए नीचे कोड का उपयोग कर रहा हूं, लेकिन मुझे सर्वर से 500 आंतरिक सर्वर त्रुटि प्रतिक्रिया मिल रही है।500 HTTP POST अनुरोध से आंतरिक त्रुटि

क्या आप कृपया एक नज़र डालें और मुझे बताएं कि कौन सा कोड भाग अपराधी/गायब है। एचटीटीपीएस कनेक्शन में कोई त्रुटि नहीं है, मुझे लगता है कि हेडर में कुछ समस्या है इसलिए सर्वर इस अनुरोध को स्वीकार नहीं कर रहा है।

// Check server address 
    url = new URL("https://example.com"); 
    String protocol = url.getProtocol(); 
    String host = url.getHost(); 
    String serviceRoot = url.getPath(); 

    // Build POST request 
    HttpPost post = new HttpPost(new URI(protocol + "://" + host 
      + serviceRoot)); 
    post.addHeader("User-Agent", "Test"); 
    post.addHeader("Content-type", "multipart/form-data"); 
    post.addHeader("Accept", "image/jpg"); 
    String authValue = "Basic " 
      + Base64 
        .encodeBase64ToString(("username" + ":" 
          + "password").getBytes()) + " " + "realm=\"example.com\""; 
    if (authValue != null) { 
     post.addHeader("Authorization", authValue); 
    } 

    File file = new File("/sdcard/Download/IMAG0306.jpg"); 
    FileBody data = new FileBody(file); 

    String file_type = "jpg" ; 
    String description = "Test"; 

    MultipartEntity reqEntity = new MultipartEntity(); 
    reqEntity.addPart("file_name", new StringBody(file.getName())); 
    reqEntity.addPart("description", new StringBody(description)); 
    reqEntity.addPart("file_type", new StringBody(file_type)); 
    reqEntity.addPart("data", data); 

    post.setEntity(reqEntity); 

    if (true) { 
     String trace = ">>> Send HTTP request:"; 
     trace += "\n " + post.getMethod() + " " 
       + post.getRequestLine().getUri(); 
     System.out.println(trace); 
    } 

    if (true) { 
     String trace = "<<< Send HTTP request-->:"; 
     trace += "\n" + post.toString(); 
     Header[] headers = post.getAllHeaders(); 
     for (Header header : headers) { 
      trace += "\n" + header.getName() + " " + header.getValue(); 
     } 
     System.out.println(trace); 
    } 

    HttpClient httpClient = createHttpClient(); 
    // replace with your url 
    // “Authorization”, “Basic ” + encodedUsernamePassword); 
    if (httpClient != null) { 
     response = httpClient.execute(post); 
     if (true) { 
      String trace = "<<< Receive HTTP response:"; 
      trace += "\n" + response.getStatusLine().toString(); 
      Header[] headers = response.getAllHeaders(); 
      for (Header header : headers) { 
       trace += "\n" + header.getName() + " " + header.getValue(); 
      } 
      System.out.println(trace); 
     } 
    } else { 
     throw new IOException("HTTP client not found"); 
    } 

धन्यवाद

+1

अपने सर्वर लॉगफाइल पर एक नज़र डालें। 500 एक आंतरिक सर्वर त्रुटि है। तो आपको वहां समाधान मिलना चाहिए। – Jens

+1

500 एक सर्वर साइड त्रुटि है, आप एक ही सटीक पैरा के साथ http rest क्लाइंट (उदाहरण के लिए डाकिया, ब्राउज़र एक्सटेंशन) में अपने अनुरोध का परीक्षण कर सकते हैं, यह एक ही परिणाम के साथ खत्म हो जाएगा। – Mostrapotski

+0

मेरा शिकार यह है कि आपका अनुरोध MaxRequestLen से अधिक है, जो आमतौर पर 131072 बाइट्स है, आप यह देखने के लिए एक छोटी फ़ाइल के साथ प्रयास कर सकते हैं कि यह काम करता है, लेकिन अनुरोध करने के दौरान आपके सर्वर त्रुटि लॉग को पूरी तरह से सुनिश्चित करने के लिए। tail -f /var/log/apache2/error.log –

उत्तर

9

500 आंतरिक सर्वर त्रुटि एक सर्वर त्रुटि यानी है। समस्या सर्वर की तरफ है, ग्राहक पक्ष नहीं। समस्या देखने के लिए आपको सर्वर लॉग जांचना होगा।

शीर्षलेख ठीक हैं। यदि हेडर गलत थे, तो आपको इसके बजाय 400 खराब अनुरोध या कुछ अन्य 4xx त्रुटि मिलेगी।

संबंधित मुद्दे