Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从Java向json RESTful服务发出post请求?_Java - Fatal编程技术网

如何从Java向json RESTful服务发出post请求?

如何从Java向json RESTful服务发出post请求?,java,Java,我试图从java向现有的RESTful服务发出POST请求,以获取json响应并将其存储在字符串中 假设RESTful服务Url如下所示: https://myStore.com/REST-API/ Exception in thread "main" java.net.UnknownHostException: myStore.com at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184) a

我试图从java向现有的RESTful服务发出
POST
请求,以获取json响应并将其存储在字符串中

假设RESTful服务Url如下所示:

https://myStore.com/REST-API/
Exception in thread "main" java.net.UnknownHostException: myStore.com
at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:184)
at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
at java.net.Socket.connect(Socket.java:589)
at sun.security.ssl.SSLSocketImpl.connect(SSLSocketImpl.java:668)
at sun.security.ssl.BaseSSLSocketImpl.connect(BaseSSLSocketImpl.java:173)
at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:432)
at sun.net.www.http.HttpClient.openServer(HttpClient.java:527)
at sun.net.www.protocol.https.HttpsClient.<init>(HttpsClient.java:264)
at sun.net.www.protocol.https.HttpsClient.New(HttpsClient.java:367)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.getNewHttpClient(AbstractDelegateHttpsURLConnection.java:191)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect0(HttpURLConnection.java:1105)
at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:999)
at sun.net.www.protocol.https.AbstractDelegateHttpsURLConnection.connect(AbstractDelegateHttpsURLConnection.java:177)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream0(HttpURLConnection.java:1283)
at sun.net.www.protocol.http.HttpURLConnection.getOutputStream(HttpURLConnection.java:1258)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getOutputStream(HttpsURLConnectionImpl.java:250)
at com.stavros.restfulServices.Requester.getJsonRespondingResults(Requester.java:70)
at com.stavros.restfulServices.MyMain.main(MyMain.java:11)
这是一种有商品的商店,你想搜索商品。为了进行搜索,您还必须发送
请求正文

{
   "searchProduct": "Football"
}
为了发表这篇文章,我用java实现了以下方法:

public String getJsonResponse(String searchProduct) throws Exception {

    String url = "https://myStore.com/REST-API/";
    String requestBody = "{\"searchProduct\": \"" + searchProduct + "\"}";

    URL obj = new URL(url);

    HttpsURLConnection connection = (HttpsURLConnection) obj
            .openConnection();

    connection.setDoOutput(true);
    connection.setRequestMethod("POST");
    connection.setRequestProperty("Content-Type", "application/json");

    OutputStream outputStream = connection.getOutputStream(); // <-- I get an exception.

    outputStream.write(requestBody.getBytes());
    outputStream.flush();

    BufferedReader in = new BufferedReader(new InputStreamReader(
            connection.getInputStream()));
    String inputLine;
    StringBuffer response = new StringBuffer();

    while ((inputLine = in.readLine()) != null) {
        response.append(inputLine);
    }

    in.close();

    return response.toString();

}
publicstringgetjsonresponse(stringsearchproduct)引发异常{
字符串url=”https://myStore.com/REST-API/";
字符串requestBody=“{\“searchProduct\”:\”“+searchProduct+“\”}”;
URL obj=新URL(URL);
HttpsURLConnection连接=(HttpsURLConnection)obj
.openConnection();
connection.setDoOutput(真);
connection.setRequestMethod(“POST”);
setRequestProperty(“内容类型”、“应用程序/json”);
OutputStream OutputStream=连接。getOutputStream();//


不存在;请检查该url。

此异常表示您的主机未知。请确保您的url存在

java.net.UnknownHostException: myStore.com

我试图运行您的代码并得到这个错误

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head><title>301 Moved Permanently</title></head>
<body><h1>Moved Permanently</h1>
<p>The document has moved <a href="http://www.myStore.com/REST-API/">here</a>.</p>
<hr><address>Apache/2.4.7 (Ubuntu) Server at mystore.com Port 80</address></body></html>

301永久搬迁
永久移除
文档已移动


导入java.io.BufferedReader;
导入java.io.InputStreamReader;
导入java.io.OutputStream;
导入java.net.URL;
导入javax.net.ssl.HttpsURLConnection;
公开课考试{
公共静态void main(字符串[]args){
//TODO自动生成的方法存根
试一试{
System.out.println(getJsonResponse(“Football”);
}捕获(例外e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
公共静态字符串getJsonResponse(字符串搜索产品)引发异常{
字符串url=”https://myStore.com/REST-API/";
字符串requestBody=“{\“searchProduct\”:\”“+searchProduct+“\”}”;
URL obj=新URL(URL);
HttpsURLConnection连接=(HttpsURLConnection)obj
.openConnection();
connection.setDoOutput(真);
connection.setRequestMethod(“POST”);
setRequestProperty(“内容类型”、“应用程序/json”);
OutputStream OutputStream=connection.getOutputStream();//请看一看,然后提供一个默认的
主机名验证程序
如:

public class DummyHostnameVerifier implements HostnameVerifier {
    @Override
    public boolean verify(String s, SSLSession sslSession) {
        return true;
    }
}

然后你需要打电话:

HttpsURLConnection.setDefaultHostnameVerifier(new DummyHostnameVerifier());

您的网线是否已插入?com.statvros.restfulServices.Requester.getJsonRespondingResults(Requester.java:70)
上的
中有什么内容?这会导致异常。提供的代码包括一个名称稍有不同的方法。“UnknownHostException”你能访问你试图发布的url吗?你用CURL测试过这个请求吗?@Ivanzelensky:我实际上没有给你发送真正的url,这就是为什么我写了“让我们假设RESTful服务url是”。我用fiddler尝试了实际的Url,得到了我应该得到的响应。我想在Java代码方面得到一些帮助。RESTful服务可以工作。我只需要调用它并获得响应。干得好,我想这篇文章包含了答案。当尝试向
发送请求时http://mystore.com
他们的web服务器正在尝试重拨将您直接发送到
http://www.mystore.com
。因此,要解决您的问题,请在您使用的url中添加
www
部分。实际上,我没有向您发送真正的url,这就是为什么我写了“让我们假设RESTful服务url是”。我用fiddler尝试了实际的Url,得到了预期的响应。我想获得Java代码方面的帮助。RESTful服务可以工作。我只需要调用它并获得响应。@StavrosVrakas您有“跟踪重定向”吗在Fiddler中打开选项?请尝试关闭,并报告结果。我实际上没有向您发送真实的URL,这就是为什么我写了“假设RESTful服务URL为”。我用fiddler尝试了实际的Url,得到了我应该得到的响应。我想在Java代码方面得到一些帮助。RESTful服务可以工作。我只需要调用它并获得响应。我实际上没有向您发送真正的Url,这就是为什么我写了“让我们假设RESTful服务Url是”。我用fiddler尝试了实际的Url,得到了我应该得到的响应。我想在Java代码方面得到一些帮助。RESTful服务可以工作。我只需要调用它并获得响应。
HttpsURLConnection.setDefaultHostnameVerifier(new DummyHostnameVerifier());