0

そこで、パラメーターを指定して GET リクエストを送信したいと思います。ただし、リクエストを送信するURLの規則のみがあるようです。POST リクエストとは異なり、パラメーターを渡す方法がわかりません。

パラメータなしでGETリクエストを送信する方法(間違っている可能性があります):

String url = "http://api.netatmo.net/api/getuser";

            URL obj = new URL(url);
            HttpURLConnection con = (HttpURLConnection) obj.openConnection();

            // optional default is GET
            con.setRequestMethod("GET");

            //add request header
            con.setRequestProperty("User-Agent", USER_AGENT);

            int responseCode = con.getResponseCode();
            Log.v(TAG, ("\nSending 'GET' request to URL : " + url));
            Log.v(TAG, ("Response Code : " + responseCode));

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            //print result
            Log.v(TAG, (response.toString()));

パラメータを使用して POST リクエストを送信する方法:

String url = "https://api.netatmo.net/oauth2/token";
            URL obj = new URL(url);
            HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();

            //add request header
            con.setRequestMethod("POST");
            con.setRequestProperty("User-Agent", USER_AGENT);
            con.setRequestProperty("Accept-Language", "en-US,en;q=0.5");

            String urlParameters = "grant_type=password&client_id=myid&client_secret=mysecret&username=myusername&password=mypass";

            // Send post request
            con.setDoOutput(true);
            DataOutputStream wr = new DataOutputStream(con.getOutputStream());
            wr.writeBytes(urlParameters);
            wr.flush();
            wr.close();

            int responseCode = con.getResponseCode();
            Log.v(TAG, "\nSending 'POST' request to URL : " + url);
            Log.v(TAG, "Post parameters : " + urlParameters);
            Log.v(TAG, "Response Code : " + responseCode);

            BufferedReader in = new BufferedReader(
                    new InputStreamReader(con.getInputStream()));
            String inputLine;
            StringBuffer response = new StringBuffer();

            while ((inputLine = in.readLine()) != null) {
                response.append(inputLine);
            }
            in.close();

            //print result
            Log.v(TAG, response.toString());

            access_token = response.substring(17, 74);
            refresh_token = response.substring(93,150);
            getRequest = "/api/getuser?access_token=" + access_token + " HTTP/1.1";

            Log.v(TAG, access_token);
            Log.v(TAG, refresh_token);
            Log.v(TAG, getRequest);
4

4 に答える 4

11

HTTP 仕様GETでは、パス パラメータまたは URL パラメータのみがサポートされているため、リクエストのように HTTP リクエスト ボディにパラメータを入れることはできませんPOST

Sotirios がコメントで述べたように、技術的には GET 本体にパラメーターをプッシュすることはできますが、API が仕様を尊重している場合、それを行う方法は提供されません。

于 2013-08-09T15:54:45.700 に答える
2

リクエスト java.net.URL にクエリ パラメータを追加しようとしましたか?

String url = "http://api.netatmo.net/api/getuser?access_token=" + access_token;
URL obj = new URL(url);
于 2013-08-09T16:50:45.030 に答える
1

これを試して、同じ問題に遭遇していました:

String bla = "http://api.netatmo.net/api/devicelist?access_token=" + AUTH_TOKEN;
URL url = new URL(bla);

BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));

String line = "";
String message = "";

while ((line = reader.readLine()) != null)
{
    message += line;
}

構文が正しくないという例外が発生しました。構文を変更すると (UTF 8 でエンコードするなど)、API はエラーを返します (404 が見つかりません... など)。

私はついにこれを使ってそれを動かしました:

try
{

        System.out.println("Access Token: " + AUTH_TOKEN);

        String url = "http://api.netatmo.net/api/devicelist";
        String query = "access_token=" + URLEncoder.encode(AUTH_TOKEN, CHARSET);

        URLConnection connection = new URL(url + "?" + query).openConnection();
        connection.setRequestProperty("Accept-Charset", CHARSET);

        InputStream response = connection.getInputStream();

        BufferedReader reader = new BufferedReader(new InputStreamReader(response));

        String line = "";
        String message = "";

        while ((line = reader.readLine()) != null)
        {
            message += line;
        }

        return message;


    } catch (MalformedURLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

注: CHARSET = "UTF-8"

于 2013-09-12T19:26:48.083 に答える
0

API が提供する URL は、私を大いに混乱させました。URLを修正したところ、動作するようになりました。

于 2013-08-14T12:59:32.963 に答える