Может ли кто-нибудь указать в правильном направлении? Я пытаюсь выполнить поиск в Интернете, новый новый Bing API, но с приведенным ниже кодом я продолжаю получать «HTTP/1.1 400 Bad Request». Тот же запрос хорошо работает в браузере (оставляя имя пользователя пустым и предоставляя ключ под паролем внутри окна подсказки).Bing Search API Аутентификация на рынке Azure Marketplace (Delphi + Indy)
var
IdHTTP1 : TIdHTTP;
uri : string;
myIOhandler : TIdSSLIOHandlerSocketOpenSSL;
begin
myIOhandler := TIdSSLIOHandlerSocketOpenSSL.Create(nil);
with myIOhandler do
begin
SSLOptions.Method := sslvTLSv1;
SSLOptions.Mode := sslmUnassigned;
SSLOptions.VerifyMode := [];
SSLOptions.VerifyDepth := 0;
host := '';
end;
IdHTTP1:= TIdHTTP.Create(nil);
IdHTTP1.Request.UserAgent:= 'Mozilla/3.0 (compatible; IndyLibrary)';
IdHTTP1.Request.Accept := 'text/javascript';
IdHTTP1.Request.ContentType := 'application/json';
IdHTTP1.Request.ContentEncoding := 'utf-8';
IdHTTP1.HandleRedirects:= True;
IdHTTP1.ConnectTimeout:= 10000;
IdHTTP1.ReadTimeout:= 10000;
IdHTTP1.Request.CacheControl := 'no-cache';
IdHTTP1.Request.BasicAuthentication:= True;
IdHTTP1.Request.Authentication:= TIdBasicAuthentication.Create;
IdHTTP1.Request.Authentication.Username:= '';
IdHTTP1.Request.Authentication.Password:= APIKey;//Encode64(APIKey);//Encode64(APIKey+':'+APIKey)
IdHTTP1.IOHandler:= myIOHandler;
uri:= 'https://api.datamarket.azure.com/Bing/SearchWeb/Web?'+
'Query=%27'+ query_text +'%27&$format=JSON&$top=50&$skip=0';
s:= IdHTTP1.Get(uri);
Документация MS очень бедна.
Вы уверены, что HTTP Basic Auth должен работать с пустым именем пользователя? И правильно ли запрос_текст «закодирован в URL»? – mjn
В соответствии с Документом для руководства по миграции: «Оставьте поле имени пользователя пустым и введите свой ключ учетной записи в поле пароля». –
Просто для тестирования я не использую никаких символов, которые нуждаются в кодировке. Я поговорю об этом позже. Эта же строка работает в браузере. –