java - 通过 HTTP 客户端编写curl 等效 java 代码时遇到问题

标签 java http url curl http-headers

我有一个 CURL 命令,当我执行它时它工作正常。下面是curl命令。如果我尝试使用 HTTP 客户端在 java 中编写相同的curl命令,我会收到 HTTP 403。我无法理解为什么在执行 CURL 时没有收到相同的错误,但在代码中却收到了。有人可以帮我修复我的代码吗?

curl -v -X POST "http://iapi-va3.svcmot.com/v1/gui/user.json?appid=4KCPMNRRT4VJBY54V3888YUOLHLICK28" -d '{"providerType":"MOTOID","email":"1234@idmtest.com","password":""}'

下面是我的 Java 代码。

public static void main(String[] args) {

        HttpClient client = new DefaultHttpClient();

        HttpPost post = new HttpPost("http://iapi-va3.svcmot.com/v1/gui/user.json?appid=4KCPMNRRT4VJBY54V3888YUOLHLICK28");
        post.addHeader("User-Agent","curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2");
        post.addHeader("Host","iapi-va3.svcmot.com");
        post.addHeader("Accept","curl/7.19.7 (x86_64-redhat-linux-gnu) libcurl/7.19.7 NSS/3.14.0.0 zlib/1.2.3 libidn/1.18 libssh2/1.4.2");
        post.addHeader("Accept", "*/*");
        post.addHeader("Content-Length", "66");
        post.addHeader("Content-Type", "application/x-www-form-urlencoded");

        Header[] headerArray=post.getAllHeaders();
        for(Header h:headerArray)
        {
            System.out.println(h.getName()+"---"+h.getValue());
        }

        try {

            List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
            nameValuePairs.add(new BasicNameValuePair("providerType", "MOTOID"));
            nameValuePairs.add(new BasicNameValuePair("email", "1234@idmtest.com"));
            nameValuePairs.add(new BasicNameValuePair("password", ""));

            post.setEntity(new UrlEncodedFormEntity(nameValuePairs));

            HttpResponse response = client.execute(post);
            System.out.println("\n"+response);
            //System.out.println(response.getStatusLine());

            BufferedReader rd = new BufferedReader(new InputStreamReader(response.getEntity().getContent()));

            String line = "";
            while ((line = rd.readLine()) != null) {
                System.out.println("\n"+line);
            }
        } 
        catch (IOException e) {
            e.printStackTrace();
        }
    }

最佳答案

有一个区别,您从curl 向服务器发送json,但在您的程序中您将其作为参数发送。

显然,在发送之前,您需要在应用程序中将参数序列化为 json。

关于java - 通过 HTTP 客户端编写curl 等效 java 代码时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35597137/

相关文章:

Java封装概念不是很清楚

http - 使用 nginx 真正记录 POST 请求正文(而不是 "-")

html - 如何检索图像 url 的标题

javascript - 通过 javascript 生成的 URL 传递 &?

http - Camel http端点动态形成url

java - 无法解析符号 'FilterQuery'

java - 使用 GAE 文件服务 API

java - center 在 BorderLayout 中不是公共(public)的;无法从包外部访问

java - 在不获取任何数据的情况下测试与 OData 的连接

java - 检查各个捕获组