我试图从java向一个现有的RESTful服务发出一个< code>POST请求,以便获得json响应并将其存储在一个字符串中。
让我们假设RESTful Service Url如下所示:
https://myStore.com/REST-API/
这是一种带有产品的商店,您想要搜索商品。为了进行搜索,您还必须发送请求正文
, 如下所示:
{
"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();
}
例外情况如下:
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)
我不知道为什么我会得到这个例外,但如果你有一个想法或者你也面临同样的问题,如果你能提出建议或答案,我将不胜感激。
这个异常意味着您的主机未知。请确保您的url存在。
java.net.UnknownHostException: myStore.com
https://myStore.com/REST-API/
不存在;请检查该网址。
我试图运行您的代码并得到此错误
<!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>
这意味着您需要重新验证webservice的url,因为它可能被移动到其他主机。https://en.wikipedia.org/wiki/HTTP_301
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
public class Test {
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
System.out.println(getJsonResponse("Football"));
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static 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();
}
}
问题内容: 当我在Node服务器上打印请求的内容时,在任何地方都看不到用户数据。 这是我的节点服务器: 这是Angular2代码: 任何人都可以帮我或解释如何处理角度的http请求。 问题答案: 那是你的服务器: 那是您的有角度的客户: 回购https://github.com/kuncevic/angular-httpclient- examples
当按钮被按下时,我执行它
可能重复:<br>Android,通过HTTP POST(SOAP)发送XML 如何在Android系统中发布SOAP服务请求? 请给我举个例子 谢谢你和我分享知识
我目前正在使用Node开发一个web应用程序。js在后端使用Express并进行响应。js在前端。在尝试通过axios将用户数据发布到节点服务器时,我遇到了一个问题。当我使用x-www-form-urlencoded内容类型进行发布时,前端将发布到服务器,但发布数据的整个JSON显示在第一个元素的键字段中。当我将内容类型更改为json时,它将停止从前端发布任何内容。我已经尝试了向服务器进行卷曲,卷
问题内容: 我读了一些将jsons发布到服务器的示例。 有人说: OkHttp是Java提供的HttpUrlConnection接口的实现。它提供用于编写内容的输入流,并且不知道(或不在乎)内容的格式。 现在,我想用名称和密码的参数对URL进行常规发布。 这意味着我需要自己将名称和值对编码为流? 问题答案: 当前接受的答案已过期。现在,如果您想创建一个发布请求并向其中添加参数,则应该使用Mul
问题内容: 我对使用roku和roku特定语言(BasicScript)非常了解。我需要对某些服务器进行api调用以获取频道。我不明白如何在roku中做到这一点。请提出建议。 问题答案: 这是直接执行此操作的方法,而不必依赖SDK中包含的代码库的语法: 阻止方法(所有程序执行停止,直到检索到URL): 非阻塞方法,您可以在等待数据时执行其他操作: