0

我正在将我的应用程序连接到 REST 类型的 web 服务。我正在使用 apache http 库,该请求是标准的发布请求,在后台线程中运行。

现在我的问题是,如果我使用

http://myserver.com/api/command

它有效,我得到了正确的响应,但与 https 相同的网址:

https://myserver.com/api/command

我得到一个空洞的回应。http 标头甚至是 200 OK。

这两个都适用于 2.0.3,但不适用于 4.0.3。在 4.0.3 上,API 似乎只有在我使用纯 http 时才有效,而使用 https 我得到空响应。

这是代码:

@Override
protected HttpResponse doInBackground(String... params) {
    String link = params[0];
    HttpClient client = createHttpClient();
    try {
        HashMap<String, ContentBody> files = ApiManager.getFiles();
        MultipartEntity mpEntity = new MultipartEntity();
        if(files != null)  {
            for(String i : files.keySet()) {
                ContentBody k = files.get(i);
                mpEntity.addPart(i, k);
            }
        }
        if(this.callParameters != null) {
            for(NameValuePair i : this.callParameters) {
                StringBody sb = new StringBody((String)i.getValue(),"text/plain",Charset.forName("UTF-8"));
                mpEntity.addPart(i.getName(), sb);
            }
        }
        httppost.setEntity(mpEntity);
        // Execute HTTP Post Request
        Log.d("ApiTask","Executing request: "+httppost.getRequestLine());
        HttpResponse response = null;
        response = client.execute(httppost);
        client.getConnectionManager().shutdown();
        return response;
    } 
    catch(UnknownHostException e) {
        exception = e;
        return null;
    }
    catch (IOException e) {
        exception = e;
        return null;
    }
    catch(Exception e) {
        return null;
    }
}

@Override
protected void onPostExecute(HttpResponse result) {
    System.out.println("STATUS:"+result.getStatusLine());
    try {
        StringBuilder responseText = this.inputStreamToString(result.getEntity().getContent());
        System.out.println("RESPONSE:"+responseText);
    }
    catch(Exception e) {
        System.out.println("Error");
    }
}

private HttpClient createHttpClient() {
    HttpParams params = new BasicHttpParams();
    HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
    HttpProtocolParams.setContentCharset(params, HTTP.DEFAULT_CONTENT_CHARSET);
    HttpProtocolParams.setUseExpectContinue(params, true);
    HttpConnectionParams.setConnectionTimeout(params, 10000);
    HttpConnectionParams.setSoTimeout(params, 10000);

    SchemeRegistry schReg = new SchemeRegistry();
    schReg.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
    schReg.register(new Scheme("https", SSLSocketFactory.getSocketFactory(), 443));
    ClientConnectionManager conMgr = new ThreadSafeClientConnManager(params, schReg);
    return new DefaultHttpClient(conMgr, params);
}

先感谢您

4

0 回答 0