2012-09-05 2 views
0

안드로이드에서 https 게시물을 테스트 중이며 2 개의 안드로이드 장치가 있습니다.이 코드는 내 2.3 장치에서 완벽하게 작동하지만 내 4.1 장치에서 "retcode = urlCon.getResponseCode();가 차단됩니다." 또한 스니퍼의 패킷을 검사하여 게시물 요청이 전송되었고 서버가 https 응답에 응답했지만 여전히 시간 초과가 될 때까지 차단되었습니다.https post in android 4.0

private String GetHttpPage(HttpsURLConnection urlsCon,String host,String url,String reference,boolean type,String curcookie,String postparam){ 
String query = postparam; 
    byte[] entitydata = query.getBytes(); 
    String line=""; 
    HttpURLConnection urlCon=urlsCon; 
    try{ 
     String domain=""; 
     String fullurl=host+url; 
     if(urlCon==null){ 
      if(host.indexOf("https")!=-1){ 
       urlCon =GetHttpsConnect(fullurl); 
        domain=host.substring(8);  
      } 
      else{ 
       urlCon =GetHttpConnect(fullurl); 
       domain=host.substring(7); 
      } 
     } 
     urlCon.setConnectTimeout(30000); 
     urlCon.setReadTimeout(30000); 


      if(reference!=null) 
       urlCon.setRequestProperty("Referer", reference); 

      urlCon.setRequestProperty("Cache-Control", "no-cache"); 
      urlCon.setRequestProperty("User-Agent", "Mozilla/4.0 (compatible; MSIE 5.5; Windows 98)"); 
      urlCon.setRequestProperty("Accept-Encoding", "identity"); 
     urlCon.setRequestProperty("Accept", "image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*"); 
     urlCon.setRequestProperty("Accept-Language", "zh-cn,zh;q=0.8,en-us;q=0.5,en;q=0.3"); 
     urlCon.setRequestProperty("connection", "Keep-Alive"); 
     urlCon.setRequestProperty("Host", domain); 
    //  

     if(curcookie.length()>0) 
      urlCon.setRequestProperty("Cookie", curcookie); 

     if(type){ 
      urlCon.setDoOutput(true); 
      urlCon.setDoInput(true); 
      urlCon.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); 
      urlCon.setRequestProperty("Content-Length",String.valueOf(entitydata.length)); 
      urlCon.setRequestMethod("POST"); 
     } 
     else{ 


      urlCon.setDoOutput(false); 
      urlCon.setDoInput(true); 
      urlCon.setRequestMethod("GET"); 

     } 

     urlCon.connect(); 

     if(type){ 

      OutputStream outStream = urlCon.getOutputStream(); 
      outStream.write(entitydata, 0, entitydata.length); 
     //  outStream.write(entitydata); 
      outStream.flush(); 
      outStream.close(); 
     } 


     retcode=urlCon.getResponseCode(); 
     if(urlCon.getHeaderField("Location")!=null) 
      redirect=urlCon.getHeaderField("Location"); 

     Map m=urlCon.getHeaderFields(); 
     Set set=m.entrySet(); 
     Iterator it=set.iterator(); 
     while(it.hasNext()) 
     { 
      Map.Entry me=(Map.Entry)it.next(); 
      String skey=me.getKey()!=null?me.getKey().toString():""; 
      String svalue=me.getValue()!=null?me.getValue().toString():""; 
      if(skey.compareToIgnoreCase("Set-Cookie")==0){ 
       String tempcookie=svalue; 
       tempcookie=tempcookie.substring(1, tempcookie.length()-1); 
       cookie+=ProcessCookie(tempcookie); 
       //cookie=cookie.substring(0, cookie.length()-2); 
      } 
     } 


//  if(urlCon.getHeaderField("Set-Cookie")!=null) 
    //  cookie=urlCon.getHeaderField("Set-Cookie"); 


     BufferedReader in = new BufferedReader(new InputStreamReader(urlCon.getInputStream())); 

     String subline=""; 
     while ((subline = in.readLine()) != null) { 

      line+=subline; 
     } 
     in.close(); 

    } 
    catch(IOException e){ 
     String aaa=e.toString(); 
     Log.e("xx", aaa); 
    } 
    catch(Exception e){ 
     String aaa=e.toString(); 
     Log.e("xx", aaa); 
    } 

    if(urlCon!=null) 
     urlCon.disconnect(); 
    return line; 

} 

답변

0

내가 문제가 아니라 코드의 나머지 부분에서, setRequestProperty를 하나의 내부 또는 어쩌면 또 다른 하나의 "사용자 에이전트"에 있다고 생각하는거야? 당신이 매니페스트 내부의 인터넷 권한이있는 가정 .

+0

답장을 보내 주셔서 감사합니다. 권한이 적용되었지만 2.3 장치에서 작동하는 이유가 궁금합니다. – mailart

0

시도 코드 어딘가에

System.setProperty("http.keepAlive", "false"); 

퍼팅.