2013-02-05 21 views
5

Obecnie próbuję przesłać do Imgur wykorzystując swoją obecną API v3, jednak wciąż otrzymuję błądprzesyłania do Imgur v3 użyciu Java https błędy

error: javax.net.ssl.SSLException: hostname in certificate didn't match: api.imgur.com != imgur.com OR imgur.com

Błąd jest dość self-explaintory więc pomyślałem, spróbuj użyć http zamiast tego, ale otrzymuję kod błędu 400 z imgur. Nie jestem pewien, czy to oznacza, że ​​próbuję przesłać, jest błędne, czy też Imgur nie lubi połączeń SSL.

Poniżej jest mój moduł kodu łączenia Imgur:

public String Imgur (String imageDir, String clientID) { 
    //create needed strings 
    String address = "https://api.imgur.com/3/image"; 

    //Create HTTPClient and post 
    HttpClient client = new DefaultHttpClient(); 
    HttpPost post = new HttpPost(address); 

    //create base64 image 
    BufferedImage image = null; 
    File file = new File(imageDir); 

    try { 
     //read image 
     image = ImageIO.read(file); 
     ByteArrayOutputStream byteArray = new ByteArrayOutputStream(); 
     ImageIO.write(image, "png", byteArray); 
     byte[] byteImage = byteArray.toByteArray(); 
     String dataImage = new Base64().encodeAsString(byteImage); 

     //add header 
     post.addHeader("Authorization", "Client-ID" + clientID); 
     //add image 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1); 
     nameValuePairs.add(new BasicNameValuePair("image", dataImage)); 
     post.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     //execute 
     HttpResponse response = client.execute(post); 

     //read response 
     BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent())); 
     String all = null; 

     //loop through response 
     while (rd.readLine() != null) { 
      all = all + " : " + rd.readLine(); 
     } 

     return all; 

    } 
    catch (Exception e){ 
     return "error: " + e.toString(); 
    } 
} 

Mam nadzieję, że ktoś może pomóc w znalezieniu błędu albo w powyższym kodzie lub wyjaśniając, jak rozwiązać aktualny problem HTTPS, dzięki.

+0

Czy kiedykolwiek znalazłeś odpowiedź na to pytanie? Naprawdę muszę wymyślić, jak to zrobić, i tworzenie własnego SSLFactory też nie działa. –

Odpowiedz

4

Wygląda na to, że nazwa domeny w certyfikacie nie jest zgodna z nazwą domeny, do której uzyskujesz dostęp, więc protokół SSL nie działa zgodnie z oczekiwaniami. Możesz powiedzieć HttpClient, aby zignorował problem z certyfikatem i po prostu ustanowił połączenie. Szczegółowe informacje można znaleźć w tej publikacji: stackoverflow answer.

+0

To okazało się problemem, ale rozwiązałem go, korzystając z odpowiedzi tutaj: http://stackoverflow.com/questions/3135679/android-httpclient-hostname-in-certificate-didnt-match-example-com-ex . Na razie wstrzymam się z nagrodą, ale dam odwagę. –