2013-04-24 73 views
0

我正在使用HTTPClient 4.2.2進行Http POST請求。我正在使用.pfx證書來訪問發佈請求中提到的URL。但我得到302,將暫時錯誤錯誤:HTTP/1.1 302臨時移動

// Java代碼的

public class CertificateAuth { 

    private static final long TIMEOUT = 500000000L; 

    //set trust store to be used to trust server certificate 

    private String tokeApiPostUrl = "http://test.com/l1/rest1/lt/v1/data"; 
    private String tokenPost = "{\"id\": \"Token_15555\",\"type\": \"token\",\"entity_type\": \"Store\",\"entity_id\": \"StoreId\",\"expiration_time\": 1376579410}"; 


    //client is taken as class varibable so that Cookies set by Server persists between 
    //multiple calls 
    private HttpClient client = null; 


    public CertificateAuth() { 

    } 


    public String createToken() throws Exception { 

     // set reasonable timeouts as we seem to wait forever to get a response: 

     KeyStore keystore = KeyStore.getInstance("pkcs12"); 
     InputStream keystoreInput = new FileInputStream("abc.pfx"); 
     keystore.load(keystoreInput, "password".toCharArray()); 

     SchemeRegistry schemeRegistry = new SchemeRegistry(); 
     SSLSocketFactory lSchemeSocketFactory = new SSLSocketFactory(keystore, "qwerty10"); 
     schemeRegistry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80)); 
     schemeRegistry.register(new Scheme("https", 443, lSchemeSocketFactory)); 
     final HttpParams httpParams = new BasicHttpParams(); 
     client = new DefaultHttpClient(new SingleClientConnManager(httpParams, schemeRegistry), httpParams); 
     String version = null; 
     HttpPost httpPost = new HttpPost(tokeApiPostUrl); 
    // httpPost.getParams().setParameter(ClientPNames.HANDLE_REDIRECTS, Boolean.TRUE); 
     client.getParams().setParameter(ClientPNames.ALLOW_CIRCULAR_REDIRECTS, true); 

     try { 
      Map<String, String> headersParameters = new HashMap<String, String>();   
      JSONObject jsonObj = new JSONObject(tokenPost); 
      setParametersJson(httpPost, headersParameters, jsonObj); 
      HttpResponse resp = client.execute(httpPost); 
      if(resp.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_OK || resp.getStatusLine().getStatusCode() == HttpURLConnection.HTTP_CREATED) { 
       System.out.println("Succesfully queried"); 
      } 
     } finally { 
      httpPost.releaseConnection(); 
     } 
     return version; 
    } 

    private void setParametersJson(HttpRequestBase httpOperation, Map <String, String> headerParameters, JSONObject jsonObject) { 
     for (String headerName : headerParameters.keySet()) { 
      httpOperation.setHeader(headerName, headerParameters.get(headerName)); 
     } 
     if (jsonObject != null) { 
      try { 
       StringEntity stringEntity = new StringEntity(jsonObject.toString()); 

       if (httpOperation instanceof HttpPost) { 
        ((HttpPost) httpOperation).setEntity(stringEntity); 
       } else if (httpOperation instanceof HttpPut) { 
        ((HttpPut) httpOperation).setEntity(stringEntity); 
       } 
      } catch(UnsupportedEncodingException ex) { 
       ex.printStackTrace(); 
      } catch(Exception ex) { 
       ex.printStackTrace(); 
      } 
     } 
    } 


    public static void main(String[] args) throws Exception { 
     CertificateAuth ua = new CertificateAuth(); 
     ua.createToken(); 

    } 
} 

回答

1

此行添加到您的代碼。

client.setRedirectStrategy(new LaxRedirectStrategy()); 
+0

這是行不通的。 – user2314126 2013-04-24 06:21:06

+0

我添加了一行client.setRedirectStrategy(new LaxRedirectStrategy());但它沒有發佈請求。 – user2314126 2013-04-24 07:13:29

+2

上述代碼正在爲HttpGet工作,但從HttpPost和HttpPut獲取302錯誤 – user2314126 2013-04-26 05:36:03