java - Camel HTTP 端点 : How to set URL-String to POST Parameter

标签 java http http-post apache-camel

先决条件

  • Apache Tomcat 7
  • Spring 3.2.11.RELEASE
  • Apache Camel 2.14.1
  • Camel HTTP 端点 ( <artifactId>camel-http</artifactId> )

问题

目前我使用以下代码将 POST 参数设置为消息正文。 camel HTTP-Component 读取参数并发送。

.setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST.name()))
.setHeader(Exchange.CONTENT_TYPE, constant("application/x-www-form-urlencoded; charset: UTF-8"))
.setHeader(Exchange.CONTENT_ENCODING, constant("UTF-8"))
.setBody("parameter1=a&parameter2=b")

问题在于某些参数是 URL 本身。 所以像这样的东西应该作为 POST 请求发送:

postparameter1=a&postparameter2=http://www.`...`.com?urlparam1=value1&urlparam2=value2&postparameter3=b

我的问题是如何发送“http://www . ... .com?urlparam1=value1&urlparam2=value2”作为 postparameter2 的值。

提前致谢。

问候,

最大

最佳答案

正如上面提到的 isim,以下对我有用。 这个想法是先解析给定的 url,然后再对其进行编码。 这避免了双重编码。

import java.io.UnsupportedEncodingException;
import java.net.*;

public static String getEncodedURL(String urlString) {
    final String encodedURL;
    try {
        String decodedURL = URLDecoder.decode(urlString, "UTF-8");
        URL url = new URL(decodedURL);
        URI uri = new URI(url.getProtocol(), url.getUserInfo(), url.getHost(), url.getPort(), url.getPath(), url.getQuery(), url.getRef());
        final URL urlFromDecoding = uri.toURL();
        encodedURL = URLEncoder.encode(urlFromDecoding.toString(), "UTF-8");
    } catch (UnsupportedEncodingException e) {
        ...
    } catch (MalformedURLException e) {
        ...
    } catch (URISyntaxException e) {
        ...
    }
    return encodedURL;
}

关于java - Camel HTTP 端点 : How to set URL-String to POST Parameter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29972673/

相关文章:

java - 我们可以在简单的网站 cPanel 中部署 .war 文件吗?

ios - NSURLConnection 有时会截断 NSMutableURLRequest 的主体

iphone - 边界如何在多部分发布请求中工作?

java - 将http post请求转为http get

javascript - 解析 Nodejs 响应后。 JSON 响应结果数组仅作为对象输出。我如何才能显示对象

java - 通过 java 将查询字符串直接发布到 httpHandler

java - Jdk1.7.0_79如何安装/配置iText7

java - 没有 @EndConversation 的 Struts 2 Conversation Scope 插件

java - java FileInputStream 和 FileOutputStream 出错

http - 在服务器端的 Dart 中,如何在 HttpClient 中设置 header