无法将“ POST”请求设置为HttpURLConnection对象

时间:2019-11-05 15:12:19

标签: java http

我将使用Java连接satang api服务器。 在以下代码中,con对象无法设置“ POST”请求。 我不知道原因 请帮助我。

public String placeLimitOrder(String amount,String pair,String price,String side) throws IOException, BadResponseException
{
    Long lnonce=new Date().getTime();
    String nonce=lnonce.toString();
    String req="amount="+amount+"&nonce="+nonce+"&pair="+pair+"&price="+price+"&side="+side+"&type=limit";
    String operation="orders/?"+req;
    String signature=getSignature(req);
    StringBuilder result = new StringBuilder();
    URL url = new URL(baseUrl+operation);
    HttpURLConnection con = (HttpURLConnection) url.openConnection();
    con.setDoOutput( true );
    con.setInstanceFollowRedirects( false );
    con.setRequestMethod("POST");

    con.setRequestProperty("Authorization", "TDAX-API "+this.key);
    con.setRequestProperty("Signature",signature);
    con.setRequestProperty( "Content-Type", "application/x-www-form-urlencoded"); 
    con.setRequestProperty( "charset", "utf-8");
    con.setRequestProperty("User-Agent", "java client");
    con.setUseCaches( false );

    int responseCode=con.getResponseCode();
    if(responseCode!=HttpURLConnection.HTTP_OK){
        System.out.println(con.getHeaderField("Allow"));
        throw new BadResponseException(responseCode);
    }
    BufferedReader rd = new BufferedReader(new InputStreamReader(con.getInputStream()));

    String line;
    while ((line = rd.readLine()) != null) {
        result.append(line);
    }
    rd.close();
    return result.toString();
}

3 个答案:

答案 0 :(得分:2)

您没有通过连接发送任何数据。 You have to use

con.getOutputStream().write(...);

您在哪里发送POST请求有效负载as bytes

答案 1 :(得分:0)

我遇到了同样的问题。 我已经通过以下方法解决了这个问题。 第一。将“ Content-Type”设置为“ application / json”。 并将请求参数解析到您的帖子正文中。

答案 2 :(得分:0)

这是我所发现的,我不能肯定地说这是每个人的答案,但希望它将为许多其他人解决这个问题。

似乎HttpsURLConnection实例的内部“方法”参数不是与实例上的requestMethod获取器和设置器非常相关。如果您像我一样,那么您将恢复使用android studio中的调试器,因为登录android非常糟糕。 Inspector vs. Evaluate Expression 左侧是Debug检查器,它显示URLConnection实例的内容。右侧显示的是“评估表达式”的结果

connection.getRequestMethod() //right side of image

令人沮丧的是,对此(或许多其他Android问题)没有任何明确的答案,当您尝试找到它们时,经常会收到使用他人图书馆的邀请。这不是理想的解决方案,因为在许多情况下,使用别人的图书馆需要安全审查。

希望这会有所帮助。就我而言,一切正常,但由于那里的错误,服务器正在发回BAD_REQUEST响应。