【问题标题】:Post a request in java [duplicate]在java中发布请求[重复]
【发布时间】:2016-05-28 16:47:02
【问题描述】:

最近我想使用搜索界面。但是我对请求正文感到困惑。 根据参考,当你需要在他们的网站上搜索时,你可以这样做:

curl -d "keyword=android" http://gankio.herokuapp.com/search

那么如何在 java 中而不是 curl 中发布这个请求呢?

我尝试过使用 okhttp。

Thread thread = new Thread(new Runnable() {
                @Override
                public void run() {
                    OkHttpClient client = new OkHttpClient();
                    String json = "keyword=android";
                    RequestBody body = RequestBody.create(JSON,json);
            Request request = new Request.Builder()
                    .url("http://gankio.herokuapp.com/search")
                    .post(body)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                Log.d("TAG",response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();`

【问题讨论】:

  • 我想找一个图书馆来简化你的生活。 Idk 如果有任何好处,但 github.com/kevinsawicki/… 是 1 行代码。
  • curl 是否正常工作并且您的代码会导致 http 400 错误? curl -dapplication/x-www-form-urlencoded 发送数据,而不是 json。 stackoverflow.com/questions/24233632/… 将是使用 OkHttp 的方式。

标签: java post


【解决方案1】:

我已经解决了这个问题。

 Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {
            OkHttpClient client = new OkHttpClient();
            RequestBody requestBody = new FormBody.Builder().add("keyword", "android").build();
            Request request = new Request.Builder()
                    .url("http://gankio.herokuapp.com/search")
                    .post(requestBody)
                    .build();
            try {
                Response response = client.newCall(request).execute();
                Log.d("TAG", response.body().string());
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();

【讨论】:

    【解决方案2】:

    您想使用 post 请求和表单参数调用服务,请使用以下代码:

    OkHttpClient client = new OkHttpClient();
    
        Request request = new Request.Builder()
          .url("http://gankio.herokuapp.com/search?keyword=android")
          .post( RequestBody.create(MediaType.parse("application/json; charset=utf-8"), ""))
          .build();
    
        try {
            Response response = client.newCall(request).execute();
            System.out.println(response.toString());
            System.out.println(response.body().string());
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    
    Response response = client.newCall(request).execute();
    

    您要调用的服务不需要任何主体传递,只需要带有值(android)的表单参数(keyword),但您正在尝试使用 body 传递参数,这是你的错误

    【讨论】:

    • 首先谢谢你。 request.post(null) ' 被禁止。
    • 是的,我使用的是最新版本。你指出了我的错误。非常感谢
    【解决方案3】:

    您可以尝试使用 java.net 中的 HttpUrlConnection 这个link会解释HttpUrlConnection的连接过程。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-06-08
      • 1970-01-01
      • 2011-09-05
      相关资源
      最近更新 更多