API-интерфейс поиска Bing Azure Marketpalce с помощью Java

Пытаюсь использовать API-интерфейс поиска bing azure marketpalce с java. У меня есть этот код:

import org.apache.commons.codec.binary.Base64;
import org.apache.http.client.ResponseHandler;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.impl.client.DefaultHttpClient;

public class BingAPI2 {
    public static void main(String[] args) throws Exception{
        BingAPI2 b = null;
        b.getBing();

    }

public static void getBing() throws Exception {

        HttpClient httpclient = new DefaultHttpClient();

        try {
            String accountKey = "myAccountKey=";
            byte[] accountKeyBytes = Base64.encodeBase64((":" + accountKey).getBytes());
            String accountKeyEnc = new String(accountKeyBytes);

            HttpGet httpget = new HttpGet("https://api.datamarket.azure.com/Data.ashx/Bing/Search/Web?$Query=%27Datamarket%27&$format=json");
            httpget.setHeader("Authorization", "Basic <"+accountKeyEnc+">");

            System.out.println("executing request " + httpget.getURI());

            // Create a response handler
            ResponseHandler<String> responseHandler = new BasicResponseHandler();
            String responseBody = httpclient.execute(httpget, responseHandler);
            System.out.println("----------------------------------------");
            System.out.println(responseBody);
            System.out.println("----------------------------------------");

        } finally {
            // When HttpClient instance is no longer needed,
            // shut down the connection manager to ensure
            // immediate deallocation of all system resources
            httpclient.getConnectionManager().shutdown();
        }
    }

}

Я получаю сообщение об ошибке:

Исключение в потоке «основной» org.apache.http.client.HttpResponseException: указанный вами тип авторизации не поддерживается. Поддерживаются только Basic и OAuth


person igor    schedule 10.09.2014    source источник


Ответы (1)


первое, что я вижу, это то, что ваша линия

byte[] accountKeyBytes = Base64.encodeBase64((":" + accountKey).getBytes());

должен прочесть :

byte[] accountKeyBytes = Base64.encodeBase64((accountKey + ":" + accountKey).getBytes());

также есть ли причина, по которой вы используете для этого библиотеки Apache? код, который я использую для получения объектов json из bing, использует java.net и выглядит так:

import java.net.URLConnection;
import java.net.URL;
import java.io.InputStreamReader;

class BingJson{

  JSONObject getJSONfromBing(String term){
  try{
    URLConnection c = new URL(term).openConnection();
    String key = (DatatypeConverter.printBase64Binary(("XXX" + ":" + "XXX").getBytes("UTF-8")));
    c.setRequestProperty("Authorization", String.format("Basic %s",key));
    c.connect();
    //etc.
  }
}

чтобы создать объект json, я бы сказал, следуйте этому коду: Convert InputStream to JSONObject

person Nicholas Thayer    schedule 18.01.2015