Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/356.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.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 从一台服务器向另一台服务器发送请求_Java_Playframework_Playframework 2.0 - Fatal编程技术网

Java 从一台服务器向另一台服务器发送请求

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

情况如下。 我在我的服务器上得到一个请求,对它进行一些处理,然后我需要根据我的处理将请求放到另一台服务器上,然后根据我从远程服务器得到的信息构建响应。 这将在JavaPlayFramework2.0中完成,我缺少从远程服务器发送请求和获取响应的部分。 任何帮助都将不胜感激。
谢谢:)

准备

我们首先需要至少知道URL和
字符集。参数是可选的,取决于功能要求

String url = "http://example.com";
String charset = "UTF-8";
String param1 = "value1";
 String param2 = "value2";
// ...
 String query = String.format("param1=%s&param2=%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&param2=%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响应)