简体   繁体   English

在Java中等效于curl命令

[英]Equivalent of curl command in java

我想要一些帮助在Java中编写等效于下面的curl命令的内容。

curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' --header  'cookie: [APP COOKIES];' -d 'sampleFile.json' 'https://url.com'

您尝试使用RESTful Web服务,因此应使用jax-rs或spring REST之类的库,这是使用RESTful Web服务的示例,您可以找到许多具有更多详细信息的示例。

I think that the answer you are looking for is which library provides Java to create HTTP requests. 我认为您正在寻找的答案是哪个库提供Java创建HTTP请求。 What is the best Java library to use for HTTP POST, GET etc.? 什么是用于HTTP POST,GET等的最佳Java库? This question provides you with all the answers that you need 该问题为您提供了所需的所有答案

With HttpClient of apache you can do it: 使用apache的HttpClient可以做到:

...
import org.apache.http.client.methods.HttpPost;
import org.apache.http.NameValuePair;
import org.apache.http.client.entity.UrlEncodedFormEntity
import org.apache.http.Consts;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.HttpEntity;
....

public String sendPost(String url, Map<String, String> postParams, 
        Map<String, String> header, String cookies) {

    HttpPost httpPost = new HttpPost(url);
    List<NameValuePair> formParams = new ArrayList<NameValuePair>();
    HttpClientBuilder clientBuilder = HttpClients.createDefault();
    CloseableHttpClient httpclient = clientBuilder.build();

    if (header != null) {
        Iterator<Entry<String, String>> itCabecera = header.entrySet().iterator();
        while (itCabecera.hasNext()) {
            Entry<String, String> entry = itCabecera.next();

            httpPost.addHeader(entry.getKey(), entry.getValue());
        }
    }

    httpPost.setHeader("Cookie", cookies);

    if (postParams != null) {
        Iterator<Entry<String, String>> itParms = postParams.entrySet().iterator();
        while (itParms.hasNext()) {
            Entry<String, String> entry = itParms.next();

            formParams.add(new BasicNameValuePair(entry.getKey(), entry.getValue()));
        }
    }

    UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(formParams, Consts.UTF_8);
    httpPost.setEntity(formEntity);

    CloseableHttpResponse httpResponse = httpclient.execute(httpPost);

    HttpEntity entity = httpResponse.getEntity();
    if (entity != null) {
        pageContent = EntityUtils.toString(entity);
    }

    return pageContent;
}

I hope this help you. 希望对您有所帮助。

EDIT: 编辑:

I add the way to send a file. 我添加了发送文件的方式。 I put in a code separate to not mix code (it is an approximation, based on this examples ): 我单独输入了一个代码,以免混淆代码(根据此示例 ,这是一个近似值):

File file = new File("path/to/file");
String message = "This is a multipart post";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
builder.setMode(HttpMultipartMode.BROWSER_COMPATIBLE);

if (postParams != null) {
    Iterator<Entry<String, String>> itParms = postParams.entrySet().iterator();
    while (itParms.hasNext()) {
        Entry<String, String> entry = itParms.next();

        builder.addTextBody(entry.getKey(), entry.getValue(), ContentType.DEFAULT_BINARY);
    }
}

builder.addTextBody("text", message, ContentType.DEFAULT_BINARY);

HttpEntity entity = builder.build();
httpPost.setEntity(entity);

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM