繁体   English   中英

java HttpsURLConnection

[英]java HttpsURLConnection

我试图使该curl请求可以从Java执行:

curl -H 'Accept: application/vnd.twitchtv.v2+json' \
-d "channel[status]=testing+some+stuff" \
-X PUT https://api.twitch.tv/kraken/channels/testacc222?oauth_token=6e7b9cyfi8zk1gr8g06eecebnitlcvb

我的解决方案如下所示:

public static void main(String args[]) throws IOException {

    String uri = "https://api.twitch.tv/kraken/channels/testacc222?oauth_token=6e7b9cyfi8zk1gr8g06eecebnitlcvb";
    URL url = new URL(uri);

    HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
    conn.setRequestMethod("PUT");
    conn.setDoOutput(true);
    conn.setRequestProperty("Accept", "application/vnd.twitchtv.v2+json");

    String data = "channel[status]=testing";
    OutputStreamWriter out = new OutputStreamWriter(conn.getOutputStream());
    out.write(data);
    out.flush();
    for (Entry<String, List<String>> header : conn.getHeaderFields().entrySet()) {
        System.out.println(header.getKey() + "=" + header.getValue());
    }
}

我看不到任何问题,但返回的只是:

Status=[400 Bad Request]
null=[HTTP/1.1 400 Bad Request]
Server=[nginx]
X-Request-Id=[ccc7a9a4a327b18ea4bf496f1f314fb8]
X-Runtime=[0.032328]
Connection=[keep-alive]
X-MH-Cache=[appcache1; M]
Date=[Sun, 06 Jul 2014 14:07:49 GMT]
Via=[1.1 varnish]
Accept-Ranges=[bytes]
X-Varnish=[2778442693]
X-UA-Compatible=[IE=Edge,chrome=1]
Cache-Control=[max-age=0, private, must-revalidate]
Vary=[Accept-Encoding]
Content-Length=[83]
Age=[0]
X-API-Version=[2]
Content-Type=[application/json; charset=utf-8]

我试图解决这个问题已有一个多星期了,但我只是看不到错误。 任何帮助将不胜感激。

尝试检查响应主体,因为它可能包含有关拒绝的详细信息。 由于Content-Type指定utf-8 ,因此您可以使用以下内容创建一个InputStreamReader:

try (Reader response =
    new InputStreamReader(conn.getErrorStream(), StandardCharsets.UTF_8)) {

    int c;
    while ((c = response.read()) >= 0) {
        System.out.print((char) c);
    }
}

更新:响应正文指出'channel'参数不存在。 这是因为curl自动将POST数据编码为application/x-www-form-urlencoded ,但是您的代码却没有。 您需要在数据上使用URLEncoder,还需要设置请求的Content-Type:

HttpsURLConnection conn = (HttpsURLConnection) url.openConnection();
conn.setRequestMethod("PUT");
conn.setDoOutput(true);
conn.setRequestProperty("Accept", "application/vnd.twitchtv.v2+json");
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");

String data = "channel[status]=testing";
data = URLEncoder.encode(data, "UTF-8");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM