java - 无法让 HttpClient 执行 Imgur API v3 发布请求

标签 java android api upload imgur

我正在尝试构建一个匿名上传到 Imgur API v3 的应用程序,这似乎会导致 NullPointerException。我确实已将 Internet 权限添加到我的 list 中,所以我不确定为什么这不起作用。 client-id 因显而易见的原因被删除。任何建议将不胜感激。

public HttpResponse uploadImage(String image_contents) {
    /* defining imgur api location */
    String API = ("https://api.imgur.com/3/image.json");
    Uri imgurAPI = (Uri.parse(API));

    // url encoding for bitmap

    // String dev_key = ("anon-dev-key-removed");
    String client_id = ("client-id-removed");
    /* String client_secret = ("secret-id-removed"); */
    /* constructing query */
    // spawning apache httpclient and post instance
    HttpClient httpclient = new DefaultHttpClient();
    HttpPost httppost = new HttpPost(API);
    // defining namevaluepairs for post data and setting entity
    // httpclient help from this url:
    // http://www.vogella.com/articles/ApacheHttpClient/article.html
    List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(1);
    nameValuePairs.add(new BasicNameValuePair("image", image_contents));
    /* for debugging purposes */
    if (android.os.Build.VERSION.SDK_INT > 9) {
        StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder()
                .permitAll().build();
        StrictMode.setThreadPolicy(policy);
    }
    /* end for debugging purposes */
    try {
        httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    // adding oauth2 header with clientid
    httppost.addHeader("Authorization", "Client-ID " + client_id);
    // execute the post and collect the response as a httpresponse object

    HttpResponse response = null;
    changeText(httppost.toString());
    try {
        response = httpclient.execute(httppost);
    } catch (ClientProtocolException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    /* shut down http client */
    httpclient.getConnectionManager().shutdown();

    return response;
}

uploadImage() 没有崩溃,但是当我尝试处理 HttpResponse 时,我得到了 NullPointerException:

public void provideURL(HttpResponse response) {
    int responseCode=response.getStatusLine().getStatusCode();
    changeText("test");
}

最佳答案

它最近可能已经改变了......但是使用带有 imgur 3.0 API 的 Apache HTTP 客户端(至少在我为它编码时)。您必须为 HTTP 客户端添加一些特殊的 SSL 处理代码。如果不这样做,您的请求应该会失败:

 // io exception with the message: (hostname in certificate didn't match: <api.imgur.com>    != <imgur.com> OR <imgur.com>)

你可以在这里看到你到底需要做什么(我在这里向其他人解释了这个问题): https://groups.google.com/forum/#!topic/imgur/RQytzya5aa4

您在发出请求时(在您的 catch block 中)是否看到任何异常?如果不是,也许 SSL 配置不再是问题。

关于java - 无法让 HttpClient 执行 Imgur API v3 发布请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15401156/

相关文章:

java - 如何将 ZipPath 转换为文件?

java - Java用户账户管理解决方案

java - Google Analytics Tracker Code (GATC) [a Javascript] 需要修改以使其能够在 JSF 中运行

java - JPOX JDO 和 Castor JDO 与 Hibernate 持久性的比较

java - 从数据库检索数据?

java - 如何获取十六进制调色板

android - com.app.MainActivity 无法转换为 com.facebook.react.ReactActivity

javascript - 使用 GMaps.js 集成 Google Maps API - 看不到在哪里添加我的 API key

api - 在 OctoberCMS 中创建 API(Web 服务)

java - Kindle-我可以从kindle paperwhite中获取数据吗?