Puedo hacer solicitudes de POST en mi solicitud y somtimes (si tengo una enorme cantidad de datos de correos), se produjo el siguiente error:SSL Broken Pipe
avax.net.ssl.SSLException: Write error: ssl=0x2f0610: I/O error during system call, Broken pipe
durante la ejecución de http.execute (httpost) en el código abajo. ¿Alguien sabe cómo evitar esto?
Intenté usar AndroidHttpClient, pero no puedo encontrar una forma válida para la autenticación básica Y probé HttpsUrlConnection, pero obtengo el mismo error.
public static String makePOSTRequest(String s, List<NameValuePair> nvps,
String encoding) {
String ret = "";
UsernamePasswordCredentials c = new UsernamePasswordCredentials("XXX", "YYY");
BasicCredentialsProvider cP = new BasicCredentialsProvider();
cP.setCredentials(AuthScope.ANY, c);
HttpParams httpParams = new BasicHttpParams();
int connection_Timeout = 5000;
HttpConnectionParams.setConnectionTimeout(httpParams,
connection_Timeout);
HttpConnectionParams.setSoTimeout(httpParams, connection_Timeout);
DefaultHttpClient http = new DefaultHttpClient(httpParams);
http.setCredentialsProvider(cP);
HttpResponse res;
try {
HttpPost httpost = new HttpPost(s);
httpost.setEntity(new UrlEncodedFormEntity(nvps,
HTTP.DEFAULT_CONTENT_CHARSET));
res = http.execute(httpost);
InputStream is = res.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
res = null;
httpost = null;
ret = new String(baf.toByteArray(), encoding);
break;
} catch (ClientProtocolException e) {
ret = e.getMessage();
} catch (IOException e) {
ret = e.getMessage();
}
return ret;
}
edición: El siguiente código se utiliza para la carga de archivos, si trato de subir archivos pequeños, el código funciona, pero si los archivos se hacen más grandes, recibo el error tubería rota. El uso de una conexión a Internet más rápida aumentará el tamaño del archivo, parecía ser un problema con el tiempo hasta que el servidor restablezca la conexión.
public static boolean upload_image2(String url,
List<NameValuePair> nameValuePairs, File file, String encoding) {
boolean erg = false;
HttpParams httpParams = new BasicHttpParams();
int connection_Timeout = 120000;
HttpConnectionParams.setConnectionTimeout(httpParams,connection_Timeout);
HttpConnectionParams.setSoTimeout(httpParams, connection_Timeout);
http = new DefaultHttpClient(httpParams);
HttpResponse res;
UsernamePasswordCredentials c = new UsernamePasswordCredentials(username, password);
BasicCredentialsProvider cP = new BasicCredentialsProvider();
cP.setCredentials(AuthScope.ANY, c);
try {
HttpPost httpost = new HttpPost(url);
MultipartEntity entity = new MultipartEntity(
HttpMultipartMode.STRICT);
FileBody isb = new FileBody(file, "application/*");
entity.addPart("File", isb);
for (int index = 0; index < nameValuePairs.size(); index++) {
ContentBody cb;
// Normal string data
cb = new StringBody(nameValuePairs.get(index).getValue(),
"", null);
entity.addPart(nameValuePairs.get(index).getName(), cb);
}
httpost.setEntity(entity);
res = http.execute(httpost);
InputStream is = res.getEntity().getContent();
BufferedInputStream bis = new BufferedInputStream(is);
ByteArrayBuffer baf = new ByteArrayBuffer(50);
int current = 0;
while ((current = bis.read()) != -1) {
baf.append((byte) current);
}
res = null;
httpost = null;
String ret = new String(baf.toByteArray(), encoding);
LastError = ret;
erg = true;
} catch (ClientProtocolException e) {
// TODO Auto-generated catch block
LastError = e.getMessage();
erg = false;
} catch (IOException e) {
// TODO Auto-generated catch block
LastError = e.getMessage();
erg = false;
}
return erg;
}
Consulte http://stackoverflow.com/questions/2899079/custom-ssl-handling-stopped-working-on-android-2-2-froyo/2906293#comment7925084_2906293 – tonys
thx, pero ya lo intenté, mismo error. Utilizo un proxy para la solicitud, pero en mi aplicación WM no se ejecuta sin errores, debe depender del sistema android – 2red13