4

curl を使用して https 投稿リクエストを実行しようとしています。このリクエストを実行すると、応答もエラーも例外もありません。ここで何がうまくいかないのかについての助けや手がかりをいただければ幸いです。ありがとう。

curl コマンドライン形式:

    curl -X POST \
-F 'image=@filename.png;type=image/png' \
-F 'svgz=@filename.svgz;type=image/svg+xml' \
-F 'json={ 
    "text" : "Hello world!",
    "templateid" : "0010",
    "timestamp" : "1342683312", 
    "location" : [ 37.7793, -122.4192 ],
    "facebook" :
    {
        "id": "738124695",
        "access_token": "<VALID_USER_FACEBOOK_TOKEN_WITH_PUBLISH_ACTIONS_PERMISSIONS",
        "expiration_date": "1342683312"                
    }
};type=application/json' \
https://sample.com/api/posts

Facebook投稿コード:

public static void uploadToFB() {
    HttpClient client = getNewHttpClient();
    HttpPost httpost = new HttpPost("https://sample.com/api/posts");
    httpost.addHeader("image", "filename.png");
    httpost.addHeader("svgz", "filename.svgz");
    httpost.addHeader("type", "application/json");
    httpost.setHeader("Content-type", "application/json");
    JSONObject data = new JSONObject();
    JSONObject facebook = new JSONObject();
    JSONArray location = new JSONArray();
    HttpResponse response = null;
    try {
        data.put("text","Hello world!");
        data.put("templateid","0010");
        data.put("timestamp","2012-07-08 09:00:45.312195368+00:00");

        location.put(37.7793);
        location.put( -122.4192);
        data.put("location", location);
        facebook.put("id", "738124695");
        facebook.put("access_token", "AAADdF92joPABAKmRojBuXZAZAP"+
            "qF8ZAxM2bM"+
             "UnIErUSYZB85y5vIHAZDZD");
        facebook.put("expiration_date", "2013-07-07T 22:00:00Z");
        data.put("facebook", facebook);

        System.out.println(" ---- data ----- "+data);

        StringEntity stringEntity = new StringEntity(data.toString());
        httpost.setEntity(stringEntity);
        try {
            response = client.execute(httpost);
            System.out.println(" --- response --- "+response);
            HttpEntity entity = response.getEntity();
            // If the response does not enclose an entity, there is no need
            // to worry about connection release
            if(entity != null) {
                // A Simple Response Read
                InputStream instream = entity.getContent();
                String result = convertStreamToString(instream);
                System.out.println(" ---- result ---- "+result);

                // Closing the input stream will trigger connection release
                instream.close();
            }
        } catch (ClientProtocolException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }

    } catch (JSONException e) {
        e.printStackTrace();
    } catch (UnsupportedEncodingException e) {
        e.printStackTrace();
    }
}

それは信頼できないネットワークだったので、そのために、このリンクのように以下のようなことをしました。

private static HttpClient getNewHttpClient() {
    try {
        KeyStore trustStore = KeyStore.getInstance(KeyStore.getDefaultType());
        trustStore.load(null, null);

        SSLSocketFactory sf = new MySSLSocketFactory(trustStore);
        sf.setHostnameVerifier(SSLSocketFactory.ALLOW_ALL_HOSTNAME_VERIFIER);

        HttpParams params = new BasicHttpParams();
        HttpProtocolParams.setVersion(params, HttpVersion.HTTP_1_1);
        HttpProtocolParams.setContentCharset(params, HTTP.UTF_8);

        SchemeRegistry registry = new SchemeRegistry();
        registry.register(new Scheme("http", PlainSocketFactory.getSocketFactory(), 80));
        registry.register(new Scheme("https", sf, 443));

        ClientConnectionManager ccm = new ThreadSafeClientConnManager(params, registry);

        return new DefaultHttpClient(ccm, params);
    } catch (Exception e) {
        return new DefaultHttpClient();
    }
}
4

2 に答える 2

6
    BufferedReader in = null;
    StringBuffer sb = new StringBuffer();
    BufferedReader inPost = null;


    try {
        DefaultHttpClient httpclient = new DefaultHttpClient();


            HttpPost httpost = new HttpPost(mURL);

            httpost.setHeader("Accept","*/*");
            httpost.setHeader("Content-Type", "application/x-www-form-urlencoded");

            List <NameValuePair> nvps = new ArrayList<NameValuePair>();
            nvps.add(new BasicNameValuePair("testkey1", "myvalue1"));
            nvps.add(new BasicNameValuePair("testkey2", "myvalue2"));


            httpost.setEntity(new UrlEncodedFormEntity(nvps, HTTP.UTF_8));

            HttpResponse response = httpclient.execute(httpost);
            HttpEntity entity = response.getEntity();

            inPost = new BufferedReader(new InputStreamReader(entity.getContent()));
            String linePost = "";
            String NLPOST = System.getProperty("line.separator");
            while ((linePost = inPost.readLine()) != null) {
                sb.append(linePost + NLPOST);
            }
            inPost.close();
            if (entity != null) {
                entity.consumeContent();
            }


        httpclient.getConnectionManager().shutdown();   

また、このリンクの詳細.. http://www.softwarepassion.com/android-series-get-post-and-multipart-post-requests/

于 2013-02-06T07:15:13.083 に答える
1

苦労した後、私は自分の問題を解決しました。これで、 を使用してMultipartEntity、以下のようにサーバーにデータを送信できます。

    HttpClient httpClient = getHttpClient();

    HttpPost httpost = new HttpPost("https://sample.com/api/posts");
    MultipartEntity mpEntity = new MultipartEntity();
    ContentBody cbFile1 = new FileBody(new File("file.png"), "image/png");
    mpEntity.addPart("image", cbFile1);

    ContentBody cbFile2 = new FileBody(new File("file.svg"), "image/svg+xml");
    mpEntity.addPart("svgz", cbFile2);

    ContentBody cbFile3 = new StringBody(getJsonData().toString(), "application/json", Charset.forName("UTF-8"));
    mpEntity.addPart("json", cbFile3);

    httpost.setEntity(mpEntity);
于 2013-01-31T17:51:09.247 に答える