【问题标题】:Java HttpPost Body Apache 4.3.2Java HttpPost 正文 Apache 4.3.2
【发布时间】:2014-02-14 01:38:53
【问题描述】:

我正在尝试使用 Apache Java LIB 4.3.2 发出 POST 类型的 HttpRequest,但遇到了问题。

没有设置body的方法,也没有参数值...

我正在尝试在 post http 请求的正文上设置 flac 二进制文件。

这是我的示例代码:

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils;




public class GoogleSpeech {

    /**
     * @param args
     */
    public static void main(String[] args) {
        try {
            HttpClient client = new DefaultHttpClient();  
            String getURL = "https://www.google.com/speech-api/v1/recognize?client=chromium&lang=pt-PT&maxresults=10";



            HttpPost get = new HttpPost(getURL);

            get.setHeader("Content-Type", " audio/x-flac; rate=16000;");
            get.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7");



            HttpResponse responseGet = client.execute(get);  
            System.out.println(responseGet);

    } catch (Exception e) {
        e.printStackTrace();
    }

    }

}

【问题讨论】:

    标签: java http http-post


    【解决方案1】:

    我不知道我是否正确地回答了您的问题,但是如果您想将参数设置为 HttpPost 实例,这里是如何做到的。

    我复制了你的第一部分,即使我觉得调用“get”一个 HttpPost 的实例有点奇怪:)

    String getURL = "https://www.google.com/speech-api/v1/recognize?client=chromium&lang=pt-PT&maxresults=10";
    HttpPost get = new HttpPost(getURL);
    get.setHeader("Content-Type", " audio/x-flac; rate=16000;");
    get.setHeader("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_6_8) AppleWebKit/535.7 (KHTML, like Gecko) Chrome/16.0.912.77 Safari/535.7");
    
    List<NameValuePair> formparams = new ArrayList<NameValuePair>();
    formparams.add(new BasicNameValuePair("param1", "paramValue1")); // name and value of your param
    formparams.add(new BasicNameValuePair("param2", paramValue2));  // name and value of your param
    // and so on
    // create the encoded form
    UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
    // set it in the post request
    get.setEntity(entity);
    

    如果您需要上传二进制文件,可以使用MultipartEntity 代替 UrlEncodedFormEntity。它有一个可用于二进制 blob 的 addPart 方法。我没有尝试过这条线,但它应该类似于:

    MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
    entity.addPart("file", new FileBody(new File("your path here")));
    

    【讨论】:

    • 感谢您的回复,如果没有任何参数?只是价值?我的意思是:我只想在 post 方法的主体上放一个二进制 flac。
    • 我更新了答案,包括对 MultiPartEntity 的引用。请看一看。
    • 非常感谢您的回复,我会测试一下,很快就会写到这里
    • 嘿 elbuild 我按照你的建议做了,我得到了这个响应:响应:HTTP/1.1 200 OK [内容类型:应用程序/json; charset=utf-8, Content-Disposition: attachment, Cache-Control: no-transform, X-Content-Type-Options: nosniff, Pragma: no-cache, Date: Tue, 04 Feb 2014 09:56:17 GMT,服务器:S3 v1.0,内容长度:0,X-XSS-Protection:1; mode=block, X-Frame-Options: SAMEORIGIN] 它应该给我一个转换后的音频字符串,这就是谷歌语音 api 所做的,也许我没有访问响应的正文?感谢您的回复
    • 抱歉,我不熟悉 Google Speech API。 200 代码显示成功,但您可能需要在某处设置断点并观察响应的结构。
    猜你喜欢
    • 1970-01-01
    • 2012-09-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-30
    • 1970-01-01
    • 2018-04-18
    • 1970-01-01
    相关资源
    最近更新 更多