Reputation: 23
I am using HttpsURLConnection
to connect client application. I am sending multiple requests for 1 user request(like login, dosearch and getResult).
It works fine as expected for First user's request(Server 1st request). but when for Second request code fails and thus facing multiple redirects.
When I start the local server for 1 request only it were working fine and remaining are failing and I have tried by below setting:
con.setRequestProperty("Connection", "close");
System.setProperty("https.proxyPort", "8888");
System.setProperty("http.keepAlive", "false");
I am able to establish the connection but the code which run for 1st time same code was failing there after.
Sample code:
URL url2 = new URL("client url");
HttpsURLConnection con2 = (HttpsURLConnection) url2.openConnection();
con2.setSSLSocketFactory(sc.getSocketFactory());
CookieHandler.setDefault(new CookieManager());
con2.setUseCaches(false);
con2.setDefaultUseCaches(false);
con2.setDoOutput(true);
con2.setDoInput(true);
con2.setReadTimeout(5000);
con2.setRequestMethod("POST");
con2.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0");
con2.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
con2.setRequestProperty("Accept-Language","en-US,en;q=0.5");
con2.setRequestProperty("Cache-Control","max-age=0");
con2.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
con2.setReadTimeout(6000);
con2.setConnectTimeout(10000);
con2.setRequestProperty("Connection", "close");
List<NameValuePair> nameValuePairsLogin = new ArrayList<NameValuePair>();
nameValuePairsLogin.add(new BasicNameValuePair("username", "username"));
nameValuePairsLogin.add(new BasicNameValuePair("password", "password"));
// some other inputs
String params=Utils.getQuery(nameValuePairsLogin).toString();
byte[] postDataBytes = params.toString().getBytes("UTF-8");
con2.setRequestProperty("Content-Length", String.valueOf(postDataBytes.length));
con2.setInstanceFollowRedirects(false);
DataOutputStream wr = new DataOutputStream(con2.getOutputStream());
wr.write(postDataBytes);
wr.flush();
wr.close();
boolean redirect = false;
int status = con2.getResponseCode();
if (status != HttpsURLConnection.HTTP_OK) {
if (status == HttpsURLConnection.HTTP_MOVED_TEMP
|| status == HttpsURLConnection.HTTP_MOVED_PERM
|| status == HttpsURLConnection.HTTP_SEE_OTHER)
redirect = true;
}
System.out.println("Response Code ... " + status);
if (redirect) {
String newUrl = con2.getHeaderField("Location");
String cookies = con2.getHeaderField("Set-Cookie");
// open the new connnection again
con2 = (HttpsURLConnection) new URL(newUrl).openConnection();
con2.setSSLSocketFactory(sc.getSocketFactory());
con2.setRequestProperty("Cookie", cookies);
con2.setRequestProperty("User-Agent", "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:16.0) Gecko/20100101 Firefox/16.0");
con2.setRequestProperty("Accept","text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8");
con2.setRequestProperty("Accept-Language","en-US,en;q=0.5");
//con2.setRequestProperty("Connection","keep-alive");
con2.setRequestProperty("Cache-Control","max-age=0");
con2.setRequestProperty("Content-Type","application/x-www-form-urlencoded");
con2.addRequestProperty("Referer", "Client URL");
con2.setReadTimeout(6000);
con2.setConnectTimeout(10000);
con2.setRequestProperty("Connection", "close");
con2.setUseCaches(false);
con2.setDoOutput(true);
con2.setDoInput(true);
con2.setDefaultUseCaches(false);
System.out.println("Redirect to URL : " + newUrl);
DataOutputStream wr1 = new DataOutputStream(con2.getOutputStream());
wr1.write(postDataBytes);
wr1.flush();
wr1.close();
}
String resonse2=Utils.toString(con2.getInputStream());
Utils.toString:
public static String toString(InputStream inputStream) throws IOException {
String inputLine;
BufferedReader in = new BufferedReader(new InputStreamReader(inputStream));
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
in=null;
return response.toString();
}
like this am making multiple requests and creating different HttpsURLConnection for each request.
Thanks for the help in advance.
Upvotes: 0
Views: 409
Reputation: 615
Each HttpURLConnection
instance is used to make a single request. If you want to send multiple request create a method getHttpURLConnection()
which gives new connection every time.
Upvotes: 1
Reputation: 1198
I think you might need to use HttpsURLConnectionImpl.getOutputStream().close(). Then try another request.
Upvotes: 0