(私はポストデータの膨大な量を持っている場合)、私はsomtimes自分のアプリケーションでPOST要求を行うと、次のエラーが発生しました:SSL壊れたパイプ
avax.net.ssl.SSLException: Write error: ssl=0x2f0610: I/O error during system call, Broken pipe
http.executeを実行しながら(httpost)コードに以下。 誰もこれを避ける方法を知っていますか?
AndroidHttpClientを使用しようとしましたが、基本認証に有効な方法が見つかりません そして、私はHttpsUrlConnectionを試しましたが、同じエラーが発生します。
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;
}
編集: 次のコードは、私は小さなファイルをアップロードしようとした場合、ファイルをアップロードするために使用され、コードは動作しますが、ファイルが大きく得れば、私は壊れたパイプのエラーが表示されます。より高速なインターネット接続を使用すると、ファイルサイズが増加します。サーバーが接続をリセットするまでは、問題が発生しているようです。
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;
}
http://stackoverflow.com/questions/2899079/custom-ssl-handling-stopped-working-on-android-2-2-froyo/2906293#comment7925084_2906293 – tonys
thxを参照してください。ただし、既に同じエラーが発生しています。私はリクエストにプロキシを使用しますが、私のWMアプリケーションではエラーなしで実行していますが、アンドロイドシステムに依存している必要があります – 2red13