2

Я пытаюсь отправить POST request с некоторыми параметрами String и jpeg image file. Весь код находится в IntentService.Android 401 Unauthorized HttpURLConnection с Basic Auth

Я использую заголовок авторизации для основного auth (учетные данные работают при использовании их с другой веб-службой).

Я не могу получить то, что не так, может быть, неисправное свойство запроса. Имейте в виду, что я отправляю Strings, но и изображение.

int bytesRead, bytesAvailable, bufferSize; 
    byte[] buffer; 
    int maxBufferSize = 1 * 1024 * 1024; 

    try { 
     FileInputStream fileInputStream = new FileInputStream(new File(filePath)); 

     URL url = new URL(urlServer); 
     String credentials = "[email protected]"+":"+"testtest"; 

     final String basicAuth = "Basic " + Base64.encodeToString(credentials.getBytes(), Base64.NO_WRAP); 

     connection = (HttpURLConnection) url.openConnection(); 
     connection.setRequestProperty("Authorization", basicAuth); 
     connection.setRequestProperty("Content-Type", "multipart/form-data"); 
     connection.setRequestProperty("Accept", "application/json"); 
     connection.setRequestProperty("Connection", "Keep-Alive"); 

     connection.setInstanceFollowRedirects(false); 

     connection.setDoInput(true); 
     connection.setDoOutput(true); 
     connection.setUseCaches(false); 

     connection.setRequestMethod("POST"); 



     outputStream = new DataOutputStream(connection.getOutputStream()); 

     outputStream.writeBytes("imei="+ getImei() 
         + "&id=38" 
         + "&type = b" 
         + "&step=1" 
         + "&image=" 
     ); 

     bytesAvailable = fileInputStream.available(); 
     bufferSize = Math.min(bytesAvailable, maxBufferSize); 
     buffer = new byte[bufferSize]; 

     int sentBytes = 0; 
     bytesRead = fileInputStream.read(buffer, 0, bufferSize); 

     while (bytesRead > 0) { 
      mBuilder.setProgress(100,(int) (sentBytes * 100/bytesAvailable),false); 
      mNotifyManager.notify(1, mBuilder.build()); 
      outputStream.write(buffer, 0, bufferSize); 
      bytesAvailable = fileInputStream.available(); 
      sentBytes += bufferSize; 
      bufferSize = Math.min(bytesAvailable, maxBufferSize); 
      bytesRead = fileInputStream.read(buffer, 0, bufferSize); 
     } 

     mBuilder.setContentText("Upload complete"); 
     mBuilder.setProgress(0, 0, false); 
     mNotifyManager.notify(1, mBuilder.build()); 

     fileInputStream.close(); 
     outputStream.flush(); 
     outputStream.close(); 

     if(connection.getResponseCode() == HttpURLConnection.HTTP_MOVED_TEMP){ 
      url = new URL(connection.getHeaderField("Location")); 
      connection = (HttpURLConnection)url.openConnection(); 
      connection.setRequestProperty("Authorization", basicAuth); 
     } 

     InputStreamReader isr = null; 
     BufferedReader reader = null; 
     StringBuilder sb = new StringBuilder(); 

     String line = ""; 
     isr = new InputStreamReader(
       connection.getInputStream()); 
     reader = new BufferedReader(isr); 
     line = reader.readLine(); 
     while (line != null) { 
      sb.append(line); 
      try { 
       line = reader.readLine(); 
      }catch (Exception e){ 
       line = null; 
      } 
     } 
     String a; 
     a = sb.toString(); 

    } catch (Exception ex) { 
     ex.printStackTrace(); 
    } 
+0

Попытайтесь использовать DefaultHttpClient –

+0

401 Ошибка не обязательно зависит от того, что вы неправильно указали имя пользователя или пароль. Это может быть также из-за неправильного кодирования. –

ответ

0

Попробуйте использовать DefaultHttpClient следующим образом. Вместо Base64.encodeToString попробуйте UsernamePasswordCredentials, как показано ниже. Даже я использовал метод POST с базовым auth, и он работал.

private HttpResponse getWebServiceResponse(String URL, ArrayList <NameValuePair> params) 
    { 
     HttpResponse httpResponse = null; 
     try 
     { 

      HttpParams httpParameters = new BasicHttpParams(); 
      // Set httpParameters like timeout etc. here. 

// defaultHttpClient 
      DefaultHttpClient httpClient = new DefaultHttpClient(httpParameters); 
      httpClient.getCredentialsProvider().setCredentials(
        AuthScope.ANY, new UsernamePasswordCredentials("USERNAME", "PASSWORD"));  
      HttpPost httpPost = new HttpPost(URL); 
      try 
      { 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 
      } catch (UnsupportedEncodingException e) { 

      } 
      httpResponse = httpClient.execute(httpPost); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     }  
     return httpResponse; 
} 
+0

И можете ли вы сказать мне, как отправить изображение как NameValuePair? – Juvie22

+0

Пожалуйста, проверьте принятый ответ в http://stackoverflow.com/q/9212082/3492139, чтобы отправить изображение в виде пары значений имени. –

 Смежные вопросы

  • Нет связанных вопросов^_^