Java PostMethod:如何向给定地址发出请求?

Java PostMethod:如何向给定地址发出请求?,java,apache-commons-httpclient,Java,Apache Commons Httpclient,我想创建一个对给定地址的POST请求,例如 对于POST请求,我创建了一个通用方法: private String postMethod(String url, HashMap<String, String> headers, String encodedAuthorizationString) throws HttpException, IOException { HttpClient client = new HttpClient(); PostMethod p

我想创建一个对给定地址的POST请求,例如

对于POST请求,我创建了一个通用方法:

private String postMethod(String url, HashMap<String, String> headers, String encodedAuthorizationString) throws HttpException, IOException {
    HttpClient client = new HttpClient();
    PostMethod post = new PostMethod(url);
    post.setRequestHeader("Authorization", encodedAuthorizationString);
    if(headers != null && !headers.isEmpty()){
        for(Entry<String, String> entry : headers.entrySet()){
            post.setRequestHeader(new Header(entry.getKey(), entry.getValue()));
        }
    }
    client.executeMethod(post);
    String responseFromPost = post.getResponseBodyAsString();
    post.releaseConnection();
    return responseFromPost;
}
private String postMethod(字符串url、HashMap头、字符串encodedAuthorizationString)抛出HttpException、IOException{
HttpClient=新的HttpClient();
PostMethod post=新的PostMethod(url);
post.setRequestHeader(“授权”,encodedAuthorizationString);
if(headers!=null&&!headers.isEmpty()){
for(条目:headers.entrySet()){
post.setRequestHeader(新的头(entry.getKey(),entry.getValue());
}
}
客户执行方法(post);
字符串responseFromPost=post.getResponseBodyAsString();
post.releaseConnection();
返回响应主机;
}
其中标头表示成对(键、值),例如(“产品[标题],“标题测试”)。我试图通过调用 postMethod(“”,标题,“xxx”); 其中,头包括对

(“产品[标题],“标题测试”)

(“产品[内容],“测试内容”)

(产品[价格],“12.3”)

(“标签”、“aaa、bbb”)

但是服务器返回了一条错误消息

有人知道如何解析地址吗

为了配合上述方法使用它?哪个部分是url?参数设置是否正确


谢谢。

您似乎混淆了URL查询参数,例如product[price]=12.3和HTTP请求头。使用setRequestHeader()旨在设置HTTP请求头,这些头是与任何HTTP请求关联的元数据

为了设置查询参数,您应该将它们附加到url中的“?”和URLCoded后面,如示例url中所示。

我发现了一个问题:

private String postMethod(String url, HashMap<String, String> headers, String encodedAuthorizationString) throws HttpException, IOException {
    HttpClient client = new HttpClient();
    PostMethod post = new PostMethod(url);
    post.setRequestHeader("Authorization", encodedAuthorizationString);
    if(headers != null && !headers.isEmpty()){
        for(Entry<String, String> entry : headers.entrySet()){
            //post.setRequestHeader(new Header(entry.getKey(), entry.getValue()));
            //in the old code parameters were set as headers (the line above is replaced with the line below)
            post.addParameter(new Header(entry.getKey(), entry.getValue()));
        }
    }
    client.executeMethod(post);
    String responseFromPost = post.getResponseBodyAsString();
    post.releaseConnection();
    return responseFromPost;
}
("product[content]", "TestContent"),

(product[price], "12.3"),

("tags", "aaa,bbb")