Java 从一台服务器向另一台服务器发送请求
情况如下。 我在我的服务器上得到一个请求,对它进行一些处理,然后我需要根据我的处理将请求放到另一台服务器上,然后根据我从远程服务器得到的信息构建响应。 这将在JavaPlayFramework2.0中完成,我缺少从远程服务器发送请求和获取响应的部分。 任何帮助都将不胜感激。Java 从一台服务器向另一台服务器发送请求,java,playframework,playframework-2.0,Java,Playframework,Playframework 2.0,情况如下。 我在我的服务器上得到一个请求,对它进行一些处理,然后我需要根据我的处理将请求放到另一台服务器上,然后根据我从远程服务器得到的信息构建响应。 这将在JavaPlayFramework2.0中完成,我缺少从远程服务器发送请求和获取响应的部分。 任何帮助都将不胜感激。 谢谢:)准备 我们首先需要至少知道URL和字符集。参数是可选的,取决于功能要求 String url = "http://example.com"; String charset = "UTF-8"; String para
谢谢:)准备 我们首先需要至少知道URL和
字符集。参数是可选的,取决于功能要求
String url = "http://example.com";
String charset = "UTF-8";
String param1 = "value1";
String param2 = "value2";
// ...
String query = String.format("param1=%s¶m2=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
查询参数必须为name=value格式,并由&连接。您通常还可以使用urlcoder\encode()
使用指定的charset
对查询参数进行URL编码
字符串#format()只是为了方便起见。当我需要字符串连接运算符+两次以上时,我更喜欢它
使用(可选)查询参数触发HTTP GET请求:
这是一项微不足道的任务。这是默认的请求方法
URLConnection connection = new URL(url + "?" + query).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
// ...
任何查询字符串都应使用?连接到URL?。Accept字符集
头可能会提示服务器参数的编码方式。如果不发送任何查询字符串,则可以将Accept字符集
标题保留。如果您不需要设置任何标题,那么您甚至可以使用URL\openStream()
快捷方式方法
InputStream response = new URL(url).openStream();
// ...
无论哪种方式,如果另一端是一个HttpServlet
,那么它的doGet()
方法将被调用,并且参数将通过HttpServletRequest#getParameter()
可用。
使用查询参数触发HTTP POST请求:
使用查询参数触发HTTP POST请求:
将URLConnection#setDoOutput()
设置为true会隐式地将请求方法设置为POST。标准HTTP POST as web FROM do的类型为application/x-www-form-urlencoded
,其中查询字符串写入请求主体
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(query.getBytes(charset));
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
InputStream response = connection.getInputStream();
// ...
注意:当您希望以编程方式提交HTML表单时,不要忘记将任何元素的name=value对放入查询字符串中,当然还有您希望以编程方式“按下”的元素的name=value对(因为这通常在服务器端用于区分是否按下了按钮,如果按下了按钮,则是哪个按钮)
您也可以将获得的URLConnection
强制转换为HttpURLConnection
,并使用其HttpURLConnection\setRequestMethod()
来代替。但是,如果您试图将该连接用于输出,您仍然需要将URLConnection
\setDoOutput()
设置为true
HttpURLConnection httpConnection = (HttpURLConnection) new URL(url).openConnection();
httpConnection.setRequestMethod("POST");
// ...
无论哪种方式,如果另一端是一个HttpServlet
,那么它的doPost()
方法将被调用,并且参数将通过HttpServletRequest#getParameter()
可用
顺便说一句,这几乎是从下面的问题复制粘贴
准备 我们首先需要至少知道URL和
字符集
。参数是可选的,取决于功能需求
String url = "http://example.com";
String charset = "UTF-8";
String param1 = "value1";
String param2 = "value2";
// ...
String query = String.format("param1=%s¶m2=%s",
URLEncoder.encode(param1, charset),
URLEncoder.encode(param2, charset));
查询参数必须采用name=value格式,并由&连接。通常,您还可以使用urlcoder\encode()
使用指定的charset
对查询参数进行URL编码
字符串#format()只是为了方便起见。当我需要字符串连接运算符+两次以上时,我更喜欢它
使用(可选)查询参数触发HTTP GET请求:
这是一项微不足道的任务,是默认的请求方法
URLConnection connection = new URL(url + "?" + query).openConnection();
connection.setRequestProperty("Accept-Charset", charset);
InputStream response = connection.getInputStream();
// ...
任何查询字符串都应使用?连接到URL。Accept Charset
标题可能会提示服务器参数的编码方式。如果不发送任何查询字符串,则可以将Accept Charset
标题保留。如果不需要设置任何标题,则甚至可以使用URL\openStream()
快捷方式方法
InputStream response = new URL(url).openStream();
// ...
无论哪种方式,如果另一端是一个HttpServlet
,那么它的doGet()
方法将被调用,并且参数将通过HttpServletRequest#getParameter()
可用。
使用查询参数触发HTTP POST请求:
使用查询参数触发HTTP POST请求:
将URLConnection#setDoOutput()
设置为true会隐式地将请求方法设置为POST。标准的HTTP POST as web FROM do类型为application/x-www-form-urlencoded
,其中查询字符串写入请求主体
URLConnection connection = new URL(url).openConnection();
connection.setDoOutput(true); // Triggers POST.
connection.setRequestProperty("Accept-Charset", charset);
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded;charset=" + charset);
OutputStream output = null;
try {
output = connection.getOutputStream();
output.write(query.getBytes(charset));
} finally {
if (output != null) try { output.close(); } catch (IOException logOrIgnore) {}
}
InputStream response = connection.getInputStream();
// ...
注意:当您希望以编程方式提交HTML表单时,不要忘记将任何元素的name=value对放入查询字符串中,当然还有您希望以编程方式“按下”的元素的name=value对(因为这通常在服务器端用于区分是否按下了按钮,如果按下了按钮,则是哪个按钮)
您也可以将获得的URLConnection
强制转换为HttpURLConnection
,并使用其HttpURLConnection\setRequestMethod()
来代替。但是,如果您试图将该连接用于输出,您仍然需要将URLConnection
\setDoOutput()设置为true
HttpURLConnection httpConnection = (HttpURLConnection) new URL(url).openConnection();
httpConnection.setRequestMethod("POST");
// ...
无论哪种方式,如果另一端是一个HttpServlet
,那么它的doPost()
方法将被调用,并且参数将通过HttpServletRequest#getParameter()
可用
顺便说一句,这几乎是从下面的问题复制粘贴
要从播放服务器调用请求,您应该使用。它易于使用,而且您还可以以异步方式进行远程调用:
public static Result feedTitle(String feedUrl) {
return async(
WS.url(feedUrl).get().map(
new Function<WS.Response, Result>() {
public Result apply(WS.Response response) {
return ok("Feed title:" + response.asJson().findPath("title"));
}
}
)
);
}
公共静态结果feedTitle(字符串feedUrl){
异步返回(
WS.url(feedUrl.get().map(
新函数(){
应用公共结果(WS.Response响应)